学科のGPU環境を使ってLLM(japanese-gpt2-small)を動かしてみる
本記事は以下の當間先生の記事を見ながらやったことの作業ログのようなものです
PythonのTransformersライブラリを使ってLLMを動かしました
参考先とやっていることはほとんど同じですが、最終的に実行するプログラムがLLMを使ったものであることや、使っているコマンドがちょっと違うなどの違いがあります。
せっかくなので公開しました
LLM初心者+学科のGPU環境の事詳しく理解していないため、誤った理解に基づく文章があるかもしれません
誤りなどあれば追記してもらえると助かります
参考
学科のGPU環境を使う流れ(PyTorch編)
トラブルシューティング時の方法なども載っていて参考になると思います。
今回僕の場合はすんなり実行できたので
概要
学科サーバーにログインする。
code:SIFファイルを作る
apptainer build transformers-pytorch-gpu-4.41.2.sif docker://huggingface/transformers-pytorch-gpu:4.41.2
適当なLLMを動かすpythonファイルを用意する。
japanese_gpt2.py
code:pythonファイルをコンテナ上で実行する(注意slurmなしなので行儀が悪い)
apptainer exec --nv transformers-pytorch-gpu-4.41.2.sif python3 japanese_gpt2.py
code:slurmに投げてログをみよう
apptainer exec --nv transformers-pytorch-gpu-4.41.2.sif python3 japanese_gpt2.py
Step1
学科サーバにログインする
ログインの仕方分からない人は使ってる友人、教職員かシス管に尋ねてください。
学科サーバはamane, braun, christina, daruの4つあります。
それぞれ、GPUの使用率が実行されているプログラムの実行状況などにより違います。
とりあえずターミナル4つ用意して、全部ログインしておくほうが良いでしょう。
ここでは、amaneにログインしたとして話を進めます。
Step2
CUDAのバージョンを確認する
code:shell
nvidia-smi
2025/12/3時点では以下の通り。
NVIDIA-SMI 535.274.02 Driver Version: 535.274.02 CUDA Version: 12.2
去年よりもCUDAのバージョンが上がっていますね。ヤッター
Step3
CUDAバージョンに適したPyTorchのバージョンを調査する
https://pytorch.org/get-started/previous-versions
このサイトはPyTorchの過去のバージョンをインストールするpipコマンドなどが載っています。
v2.7.1はCUDAのバージョン11.8に対応してことがわかりました
code:pipコマンド
# CUDA 11.8
pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 --index-url https://download.pytorch.org/whl/cu118
CUDA Version: 12.2でもv2.8.0以上で、動かせるかは未確認
Step4
PyTorchのバージョンに適したPythonのバージョンを調べる
今回は調べませんでした。
可能ならやった方がいいと思います。
PyTorchのいい感じのバージョンが動かせる配布されているDockerファイルなら、pythonのバージョンも大丈夫だろうと考えてです。
Step5
PyTorchのバージョンに適したPythonのバージョンを調べる
今回は調べませんでした。
可能ならやった方がいいと思います。
PyTorchのPyPIあたりを見ればいいかなと思います。
PyTorchのいい感じのバージョンが動かせる配布されているDockerファイルなら、pythonのバージョンも大丈夫だろうと考えてです。
Step6
SIFファイルを作る(Dockerイメージを探す編)
学科サーバーにはpythonは入っていない。
例え入ってたとしてもバージョンの問題などが出てくるだろう
そのため、学科サーバーではapptainer (singularity) を使って、コンテナ上で実行する必要がある。
今回は dockerhubで公開されているイメージファイルのうち、huggingfaceが公開しているイメージ(huggingface/transformers-pytorch-gpu)からSIFファイルを作成することにする。
Tagを見てみると、様々なバージョンが公開されていることがわかる
(ik.iconたぶん、transformersライブラリのバージョンです。)
さて、ではどのtransformersライブラリのバージョンを使えばいいのだろうか。
これはPyTorchの条件を満たすものの中で、新しいものを使えば良いと思われる。
TAGの中で(latestを除いて)一番新しいもの確認してみよう
https://scrapbox.io/files/69304cc9d6b18cdc68d61bd2.png
今使ってみたいtransformersのバージョンが4.41.2だと決まった
では、transformersのバージョン4.41.2はどんなPythonのバージョンやPytorchのバージョンを要求しているのかPyPIで確認しよう
https://pypi.org/project/transformers/4.44.2/
https://scrapbox.io/files/69304d32d33240f1db68b47a.png
この通り、Pythonは3.8以上 PyTorchは1.11以上であればいいことがわかった。
docker pull huggingface/transformers-pytorch-gpu:4.41.2 で引っ張ってくるdockerfileはこの条件を満たしているだろうか
仮想環境を立てて、その中で確認するのは1つの方法だか、今回はwebページの方のdockerfileの方でも確認してみようと思う。
https://hub.docker.com/r/huggingface/transformers-pytorch-gpu/dockerfile
ARG PYTORCH='2.3.0
v2.7.1まではCUDAのバージョン11.8で動かせることがわかっているので、学科サーバーのCUDAのバージョン12.2でも問題ないだろうことがわかる
Step7
SIFファイルを作る(Dockerイメージ変換編)
学科サーバー内で適切な作業ディレクトリに移動する。
使用するコマンドはapptainerだ。誰でも使えると思うが念のため使えるか確認をしてみる
code:apptainerのバージョン
% apptainer --version
apptainer version 1.3.4
さて、apptainerコマンドが実行できることがわかったので、dockerhubからdockerを持ってきて、それを元にSIFファイルを構築しよう
code:build
apptainer build transformers-pytorch-gpu-4.41.2.sif docker://huggingface/transformers-pytorch-gpu:4.41.2
実行すると、transformers-pytorch-gpu-4.41.2.sifという名前にSIFファイルができているはずだ。
ビルドには5分から10分ほどかかると思われる。
Step8
SIFファイルの環境を調べてみる
力尽きたので、寝ます。起きたら更新します(しないかもしれない)
以下メモ
シェルに入る
apptainer shell --nv transformers-pytorch-gpu-4.41.2.sif
code:コマンド
apptainer exec --nv transformers-pytorch-gpu-4.41.2.sif \
python3 - << 'EOF'
import sys, torch
print("Python:", sys.version)
print("Torch:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
EOF
Step9
LLMを動かしてみる
apptainer exec --nv transformers-pytorch-gpu-4.41.2.sif python3 japanese_gpt2.py
watch -n 0.1 nvidia-smi
Step10
pythonファイルをslumに投げる
リダイレクトとかしてjapanese_gpt2.pyの標準出力を保存するようにしておく
普通に保存するプログラムをpythonファイル内に書くべきだと思うけど、お試しということで