2019年のAWS re:InventカンファレンスでAmazonは、ディープラーニングモデルのトレーニング、デプロイ、推論生成を簡単にするオープンソースライブラリのDeep Java Library(DJL)をリリースした。
Javaは90年代から1、2を争う人気プログラム言語の座を保っているが、マシンラーニングの分野においては、ささまざまなリソースやディープラーニング用フレームワークの揃ったPythonが最も多く使用される言語になっている。DJLの目的は、慣れ親しんだ概念と直感的なAPIを使うことで、ディープラーニング用のオープンソースツールをJava開発者にも利用可能にすることだ。Java開発者は使い慣れたIDEでDJLを使用したり、あるいはJupyter NotebookベースでJavaコードを実行することができる。
DJLフレームワークは非依存性を備えており、既存のディープラーニングフレームワーク上でJava Native Access(JNA)を使用することで、一般的に使用されているディープラーニング機能を抽象化する。現時点では、Apache MXNetとTensorFlow用の実装が提供されている。
DJLのサンプル仮想コードで示されている、一般的なモデルトレーニング用の機能は次のようなものだ。
// Create an empty model
Model model = Model.newInstance())
. . .
// Setup training with configurations
Trainer trainer = model.newTrainer(config))
. . .
// Use trainer to fit model with training and validation datasets
TrainingUtils.fit(trainer, epoch, trainingSet, validateSet);
// Save the model
model.save(modelDir, "mlp");
イメージ分類コードの完全なサンプルは、InfoQの記事"Deep Java Library(DJL)の紹介"にある。DJLのGitHubリポジトリにも一般的なデータセットやトレーニング済モデル、コード例などの他、イメージ分類や物体検出(instance segmentation)、行動認識(action recognition)といったユースケースに関するJupyter Notebookのチュートリアルが提供されている。
オープンソースのJava用ディープラーニングライブラリとしてはもうひとつ、Javaで記述され、Apache SparkとHadoopを使ってトレーニングを高速化するDeep Learning for Java(DL4J)がある。DL4Jは堅牢で柔軟性があり、効率のよい、Java開発者用の優れたフレームワークだが、DJLや他のディープラーニングフレームワークと比較した場合、フレームワーク非依存なDJLとは違い、Pythonベースの膨大なマシンラーニングコードベースを活用できないというデメリットがある。
DJLについて詳しく知るには、DJLのWebサイトでJava Doc API SpecificationやGetting Startedのページを確認するとよいだろう。