GPT-NeoX 環境構築 初心者向けガイド
このドキュメントは、GPT-NeoX(大規模言語モデルを自分で学習するためのツール)を動かす環境を、ゼロから作り直した作業を解説したものです。
参考文献
用語の解説
作業の前に、出てくる言葉をざっくり押さえておきます。
- GPT-NeoX:AI(言語モデル)を自分で「学習(トレーニング)」させるためのソフト一式
-
GPU:AI の計算を高速にこなす専用のライブラリ。今回はサーバーに
A100という高性能 GPU が2枚ありました - CUDA(クーダ):GPU を計算に使うための土台ソフト。バージョンが重要
- PyTorch(パイトーチ):AI を作るための代表的なライブラリ。CUDA とバージョンを合わせる必要がある
- conda(コンダ):Python のライブラリを、プロジェクトごとに環境を分けて管理するシステム。 今回使用したサーバーが共用サーバーだったため使用
- Python 3.8 など:プログラミング言語 Python のバージョン。これも合わせる必要があります
一番大事なポイント
AI 環境づくりで最大の難所は「バージョンの相性合わせ」です。CUDA・PyTorch・Python の組み合わせが少しでもズレるとエラーが大量に起きてしまいます(1敗)
目指したゴールの組み合わせ
| 項目 | バージョン | ひとこと |
|---|---|---|
| CUDA | 11.8 | |
| PyTorch | 2.0.1(cu118対応版) | CUDA 11.8 とセットで動く版 |
| Python | 3.8 | この記事の手順が想定している版 |
GPT-NeoXが安定して動く環境です
作業の全体像
やったことを大きな流れで並べると、こうなります。
① Miniconda を入れる (なお、これを採用した理由はanacondaだと余計なものが入り安定性が下がるため)
↓
② 新しい「環境」= neox38 環境を作る(Python 3.8)
↓
③ GPT-NeoX 本体をダウンロード
↓
④ CUDA 11.8 を使う設定にする(+自動で毎回設定されるように)
↓
⑤ 必要なライブラリを一気にインストール(n敗)
↓
⑥ 計算を速くするfused_kernelsを事前にビルド → 成功!
以下、ひとつずつ実際に打ったコマンド付きで見ていきます。
コマンド内の
tempや/work2/...は今回の環境固有のユーザー名・パスです。自分の環境に読み替えてください。
3. ステップごとの解説
① Miniconda を入れる
Miniconda は、前述の「conda」の軽量版です。これをインストールしました。
インストール後に conda init というコマンドを実行します。これは「これから conda コマンドをいつでも使えるようにする」ものです。実行後、ターミナルを開き直すと conda が使えるようになります。
# 1. インストーラをダウンロード
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 2. /work2 配下にインストール(-b=対話なし, -p=インストール先を指定)
bash Miniconda3-latest-Linux-x86_64.sh -b -p /work2/temp/miniconda3
# 3. conda を有効化して初期化(これで以後 conda コマンドが使える)
source /work2/temp/miniconda3/etc/profile.d/conda.sh
conda init bash
② 新しい環境「neox38」を作る
GPT-NeoX 専用の環境を、Python 3.8 指定で新規作成しました。名前は neox38。
# 環境を作る(-p でフルパス指定、python=3.8 でバージョン固定)
conda create -p /work2/temp/envs/neox38 python=3.8
# 環境に入る(有効化)
conda activate /work2/temp/envs/neox38
これで「Python 3.8 専用の作業スペース」ができました。ここに必要なライブラリを入れていきます
③ GPT-NeoX 本体をダウンロード
GitHub から GPT-NeoX 一式をクローンしました。これで学習用のプログラムがそろいます。
# 作業場所へ移動してクローン
cd /work2/temp
git clone https://github.com/EleutherAI/gpt-neox.git
# 以降はこのフォルダの中で作業する
cd gpt-neox
④ CUDA 11.8 を使う設定にする
サーバーには複数バージョンの CUDA が入っていることがあります。「今回は 11.8 を使う」とはっきり指定する必要があります。そのために4行の設定を入れました。
# いま使うCUDAを 11.8 に指定
export CUDA_HOME=/usr/local/cuda-11.8 # CUDA 11.8 の場所を指定
export PATH=$CUDA_HOME/bin:$PATH # コマンドを見つけられるように
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH # ライブラリを見つけられるように
さらに、これらを毎回手打ちしなくて済むよう、.bashrc(ログイン時に自動実行される設定ファイル)に書き込んで永続化しました。これで次からは自動で CUDA 11.8 が選ばれます。
# 毎回自動で設定されるよう .bashrc の末尾に追記
echo 'export CUDA_HOME=/usr/local/cuda-11.8' >> ~/.bashrc
echo 'export PATH=$CUDA_HOME/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
# 確認(11.8 と出れば成功)
nvcc --version
exportは「この設定を有効にする」という意味の命令です。.bashrcに書くと「毎回自動でやってくれる」ようになります。>>は「ファイルの末尾に追記する」記号です。
⑤ 必要なライブラリを一気にインストール(最大の難所)
pip install(Python のライブラリをまとめて入れるコマンド)で、必要な道具をインストールします。ここで3つのつまずきがありましたが、すべて解決しました。
まず、つまずき対策の設定を先に入れてから、本体をインストールします。
# 【つまずき対策】tokenizers は Python3.8 対応版に固定
pip install tokenizers==0.13.3
# PyTorch 2.0.1(CUDA 11.8 対応版)を入れる
pip install torch==2.0.1+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
# GPT-NeoX が要求する残りのライブラリをまとめて入れる
pip install -r requirements/requirements.txt
# ログ可視化ツール(TensorBoard など)
pip install -r requirements/requirements-tensorboard.txt
つまずき:tokenizers が Python 3.8 で作れない
tokenizers というライブラリの最新版が Python 3.8 に対応しておらず、ビルドに失敗しました。
対処:Python 3.8 でも動く少し古い版(0.13.3)を指定しました。
pip install tokenizers==0.13.3 # バージョンを固定して入れる
==0.13.3のようにバージョンを固定するのは、定番テクニックです。
インストール完了
これらを乗り越えて、狙い通りの組み合わせが入りました。確認コマンドはこちら。
# 入ったバージョンを確認
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
pip list | grep -E "torch|deepspeed|transformers|tokenizers"
| 入ったもの | バージョン |
|---|---|
| PyTorch | 2.0.1+cu118(CUDA 11.8 対応版) |
| DeepSpeed | 0.16.5(学習を高速・省メモリにする道具) |
| transformers | 4.33.3 |
| tokenizers | 0.13.3(固定) |
加えて、学習の様子をグラフで見るための TensorBoard なども入れました。
⑥ 計算を速くするライブラリを事前ビルド → ついに成功!
fused_kernels は、GPU 計算をまとめて速くするライブラリです。これは使うときに自動で組み立てられますが、前もって組み立て(ビルド)ておくことで、本番でつまずかないようにします。
# gpt-neox フォルダの中で実行(fused_kernels を事前ビルド)
python ./megatron/fused_kernels/setup.py install
4. つまずきポイントまとめ(早見表)
| 症状 | 原因 | 対処 |
|---|---|---|
| tokenizers のビルド失敗 | 最新版が Python 3.8 非対応 |
pip install tokenizers==0.13.3 で版を固定 |
| fused_kernels がビルドできない(作り直し前) | バージョン不整合 | 11.8 系に統一して解決 |
5. 完成した環境(最終形)
| 項目 | 内容 |
|---|---|
| 環境の場所 | /work2/temp/envs/neox38 |
| Python | 3.8.20 |
| CUDA | 11.8 |
| PyTorch | 2.0.1+cu118 |
| DeepSpeed | 0.16.5 |
| GPU | NVIDIA A100 × 2枚 |
6. 環境に入るためのコマンド(コピペ用)
次回この環境で作業するときは、以下をまとめて実行すれば準備完了です。
# 1. conda を使えるようにする
source /work2/temp/miniconda3/etc/profile.d/conda.sh
# 2. 環境に入る
conda activate /work2/temp/envs/neox38
# 3. 作業フォルダへ移動
cd /work2/temp/gpt-neox
7. この作業の教訓
- 最新版が正解とは限らない。 動作実績のある組み合わせを選ぶ方が、結果的に早い
- バージョンの相性がすべて。 CUDA・PyTorch・Python は三位一体で揃える
- 迷ったら作り直す勇気。 こじれた環境を粘って直すより、まっさらから正しく組む方が速いことがある
- エラーは一つずつ潰す。 原因を特定し、非対応なら版を固定するなど、ひとつずつ素直に対処する
以上が、GPT-NeoX 環境をゼロから作り直した作業の全体像です。