さくらの高火力DOKでLlama3.1をGRPOトレーニング
前置き
さくらの高火力DOKとは、さくらインターネットのコンテナ型GPUクラウドサービスです。ざっくり言うと、Dockerイメージをアップして、強力なGPU環境で動かせるサービスです。
2025年4月30日まで、NVIDIA H100 (80GB) が1時間400円弱で使えるキャンペーンをやっているとのことで、試してみました。 初回のみ3000円分の無料枠があるので、7時間ちょっとその枠内で試せます。
さくらインターネット、コンテナー型GPUクラウドサービス「高火力 DOK」にて「AI開発応援キャンペーン」を実施 | さくらインターネット
やること
今回は、高火力DOKでJupyterLabを動かして、Llama3.1をGRPOトレーニングするサンプルノートを動かします。
手順
ノートのダウンロード
まず以下のノートを開いて、 File -> Download -> Download .ipynb を選択してダウンロードします。
Llama3.1_(8B)-GRPO.ipynb - Colab 1
高火力DOK
- 未登録の人は登録してください: https://www.sakura.ad.jp/koukaryoku-dok/
- 高火力DOKのコントロールパネルにログイン
- タスク -> 新規作成 -> 以下を入力して作成
- 「開始日時」欄が表示されるまでしばらく待つ
- 「状態」欄に「実行中…」と出ても、まだ起動してない状態らしい(課金も発生してないっぽい)です
- 「ログを表示」を押しても何も表示されないので、ただ待つ以外にないです。これは改善して欲しいところです。
- 「開始日時」欄に日時が表示されたら、ログを開く
-
http://localhost:8888/lab?token=
とあるので、それ以降の文字列をマウスで選択して右クリックでコピーする 4
-
- HTTP URI を別タブで開く
- JupyterLabのログイン画面が開くので、さきほどのtoken文字列を”Password or token”欄に貼り付けてログイン
JupyterLab
- ダウンロードした
Llama3_1_(8B)_GRPO.ipynb
をドラッグアンドドロップしてアップロード - 最初のセルの1行目にある
%%capture
を削除- これがあると出力が抑制されるので、動いているのがわかりづらい
- Run -> Run All Cells
合計30分ほどで終了しました。
結果保存
高火力DOKでは、/opt/artifact/
に保存したファイルを、タスク終了後にダウンロードすることができます。5
そこで、必要に応じて今回の成果物を/opt/artifact/
にコピーしておきます。
JupyterLabでターミナルを開いて、以下のコマンドを実行します。
cp -r grpo_saved_lora grpo_trainer_lora_model outputs Llama3_1_\(8B\)_GRPO.ipynb /opt/artifact/
タスク終了
高火力DOKのコントロールパネルで「中断」ボタンを押して、タスクを終了します。
終了後しばらくすろと、/opt/artifact/
に保存されているファイルがダウンロードできるようになります。
おまけ
同じものをローカル環境で動かしたい場合
前提
- NVIDIA GPUが搭載されていること
- Dockerがインストールされていること
- NVIDIA Container Toolkitがインストールされていること
docker run
docker run -it --rm -p 8888:8888 --gpus all -v .:/home/jovyan/work quay.io/jupyter/pytorch-notebook:cuda12-python-3.12
-
-v .:/home/jovyan/work
でカレントディレクトリをコンテナ内の/home/jovyan/work
にマウントしています。/home/jovyan/work
はJupyterLabの作業ディレクトリです。- ホスト側とコンテナ内でユーザーが異なるので、書き込み権限に注意してください。
nvidia-smi
ファインチューニング中にJupyterのターミナルでnvidia-smi
を実行したら、以下のように表示されました。
GPUメモリが余っているのがちょっともったいない感じです。
(base) jovyan@41633dc3-ad9d-42ef-b9a3-09964217c968:~$ nvidia-smi
Tue Feb 25 04:57:39 2025
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.06 Driver Version: 535.183.06 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA H100 80GB HBM3 Off | 00000000:00:09.0 Off | 0 |
| N/A 49C P0 411W / 700W | 54725MiB / 81559MiB | 55% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
注釈
-
Train your own R1 reasoning model locally (GRPO) - Unslothで紹介されているものです。 ↩
-
Jupyterの公式ブログCUDA enabled Jupyter Docker Images | by Ayaz Salikhov | Jupyter Blogで紹介されているイメージです。jupyter/pytorch-notebook · QuayからCUDA入りのを選びました。 ↩
-
v100も選べますが、古いのでトラブルの元です。v100はCompute Capabilityが7.0で、Google Colab無料枠のT4が7.5なので、それよりも低い。メモリは32GBもあるんですけどね。実際動かしてみたら
"The kernel for Llama3_1_(8B)_GRPO.ipynb appears to have died. It will restart automatically."
と出てしまいました。 ↩ -
ログ画面ではなぜかCtrl+Cでコピーできないので、マウスで選択して右クリックでコピーする必要があります。 ↩
-
定義済み環境変数について | タスクの実行方法 | さくらのクラウド マニュアル にある通り、
SAKURA_ARTIFACT_DIR
で定義されています。ただし、サポートへ問い合わせたところ、この環境変数は変更できないとのことです。 ↩