0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPT-NeoX 環境構築 初心者向けガイド

0
Posted at

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. この作業の教訓

  1. 最新版が正解とは限らない。 動作実績のある組み合わせを選ぶ方が、結果的に早い
  2. バージョンの相性がすべて。 CUDA・PyTorch・Python は三位一体で揃える
  3. 迷ったら作り直す勇気。 こじれた環境を粘って直すより、まっさらから正しく組む方が速いことがある
  4. エラーは一つずつ潰す。 原因を特定し、非対応なら版を固定するなど、ひとつずつ素直に対処する

以上が、GPT-NeoX 環境をゼロから作り直した作業の全体像です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?