4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WandBとさくらインターネットの高火力DOKを組み合わせて使ってみた

Last updated at Posted at 2024-10-07

はじめに

株式会社晴工雨読の片山と申します。晴工雨読の概要はこちらからご覧ください。

Techブログ第2弾は、Weights & Biases (W&B)とさくらインターネットの高火力DOKを組み合わせて、機械学習を効率的に実行する方法を解説していきます。まずそれぞれのツールの概要を、その後実際の手順をハンズオン形式で述べていきます。

WandB(Weights & Biases)とは

正式名称をWeights & Biases、よくWandBと書いて「ワンドビー」とよばれているのを見聞きします。WandBは、機械学習の実験管理や可視化、モデルの管理をサポートするツール(ライブラリ)です。個人利用や小規模プロジェクトであれば、無料で利用できます。

今回は公式ドキュメントから、Kerasを利用した機械学習を例に進めていきます。WandBの基本的な使い方も知ることができますので、ぜひご一読ください。Colab Notebookも用意されています。

さくらインターネットの高火力DOK(ドック)とは

高火力DOKは、さくらインターネットが提供するコンテナサービスです。高性能GPUが従量課金制かつ比較的低価格で利用できる点が特徴のようです。今回はこのサービスを利用していきます。

実行手順

1. Dockerイメージを作成

任意のディレクトリの中に4つのファイルを配置し、Dockerコマンドを利用して実行確認します。今回はprojectディレクトリと命名したディレクトリにファイルを配置しました。まずは、それぞれのファイルの内容を解説していきます。

directory
project
├─ Dockerfile
├─ requirements.txt
├─ tutorial.py
└─ .env

今回は、DockerイメージをDockerfileで作成することにしました。ここはファイル内のコメントに解説を記しています。

Dockerfile
# ベースイメージとしてPython 3.9を使用
FROM python:3.9-slim

# 作業ディレクトリを作成
WORKDIR /app

# requirements.txtとローカルのPythonファイルをコンテナ内にコピー
COPY ./requirements.txt /app/
COPY ./tutorial.py /app/

# 必要なパッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt

# デフォルトの実行コマンド
CMD ["python", "tutorial.py"]

コンテナに作成されるPython環境の中に、必要なパッケージ(ライブラリ)を入れていくための環境情報ファイルを作成します。今回はWandBとKerasを利用するのに必要なパッケージをインストールします。

requirements.txt
wandb==0.15.5
tensorflow==2.12.0
tensorflow_datasets==4.8.2

実行するPythonファイルは、公式ドキュメントにあるColab Notebookをダウンロードして編集したものを利用します。手順は次のとおりです。

  1. 公式ドキュメントのColab Notebook(ipynbファイル)をPythonファイルとしてダウンロード
  2. ダウンロード時のファイル名がuse_wandbmetriclogger_in_your_keras_workflow.pyと長いのでtutorial.pyと変更
  3. コードの中で!pip install -qq -U wandbはColab Notebookで使用する部分なのでコメントアウト

最後に環境変数ファイルです。ここには、WandBで取得したAPIキーを記載します。(GitHub等、一般に公開しないようご注意ください。)

.env
WANDB_API_KEY=<ここにAPIキーを記載>

2. ローカル環境にて実行確認

ファイルを配置したディレクトリに入り、Dockerコマンドを利用して実行確認します。1行目でイメージを作成し、それを利用して2行目でコンテナを起動します。

bash
$ docker build -t myapp:latest . 
$ docker run --env-file .env myapp

WandBの画面を見てみましょう。「My Projects」から正常に実行できているのが確認できます。ここでは最終結果を載せていますが、実際は1エポックごとに結果がリアルタイムで更新されていきます。

process.png

3. Docker Hubへイメージをアップロード

ローカルでの実行確認が完了したので、Docker Hubへイメージをアップロードして高火力DOKで実行する準備をしていきます。

ローカル環境にて実行確認した時と同じ階層で、まずDocker(Docker Hub)にログイン後、イメージをビルドし、タグづけ、そしてプッシュを行います。yourusernameにはユーザ名を、yourimagenameには任意のイメージ名を入れてください。

bash
$ docker login
$ docker buildx create --use
$ docker buildx build --platform linux/amd64,linux/arm64 -t yourusername/yourimagename:latest --push .

docker buildxコマンドについて補足ですが、今回はマルチプラットフォームイメージというものを作成しています。これは私のデバイスがMacbookであることから、そのほかの環境でも正常に起動するためです。詳細な内容は参考文献からご確認ください。

ここまでの工程を経て作成したイメージは一般公開していますので、これまでの手順を踏まずに次の手順から試すことも可能です。

4. 高火力DOKでDockerイメージを実行

ではいよいよ、高火力DOKでDockerイメージを実行していきます。

ログイン後、「タスク」タブ(赤枠①)から「新規作成」を選択し、イメージ(赤枠②)に前の手順でアップロードしたイメージのイメージ名とタグを、環境変数(赤枠③)にはローカル環境で.envファイルに記載していたWandBのAPIキーを、それぞれ入れます。

input.png

今回は、先ほどのイメージを利用するので、このような内容になります。環境変数は半角英数字のものが入ります。「作成」を押すと、実行が開始されます。このとき、ローカル環境で実行確認したWandBの画面を確認すると、同様な結果を見ることができます。

input_ex.png

実行が完了すると、タスクの「詳細」から、実行ログを確認することができます。

output_ex.png

さらに、WandBのダッシュボードからログファイルをダウンロードすることが可能です。高火力DOKのタスクの「詳細」内にある「アーティファクト」からファイルを出力させることも可能ですが、ここでは割愛します。

log_ex.png

おわりに

今回は、機械学習の便利ツールWandBと従量課金制のコンテナサービス高火力DOKを組み合わせて使ってみました。WandBは他にもさまざまな機能を持っているようなので、今後ハックしていきたいと思います。クラウドサービスも、使い倒してみると効率的な開発ができそうでわくわくしますね。

参考文献

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?