2023年3月28日火曜日

Alpaca-Lora-4bit をWSL2でうごかしてみる(適当な記事)


 

もはや説明の必要もないかもしれませんが

スタンフォード大学のアルパカ論文より生まれた、LLMを調教できる最高のツール。

その天の恵みを、ボクと一緒にインストールしていこう。


PyTorchのエラーとか、CUDAのエラーとか、シンボリックリンクのエラーとか、

色々あるけれど、僕が一緒にいるから、大丈夫だよ。

大丈夫じゃないこともあるけど、愛があれば大丈夫。


つらいときは、思い出して。

「CUDAとPyTorchは、愛があれば動く。」



本編

Alpaca-Lora-4bit をWSL2でうごかしてみる(適当な記事)

https://github.com/johnsmith0031/alpaca_lora_4bit


(3/28注:最近のコミットでGPTQとPEFTが独自バージョンに変更されました。そのため、この記事の内容は書いてからわずか一日(正確には6時間)で陳腐化いたしました。README.MDを確認しながら、この記事の中の使えるところだけ、使ってみてください。私はまだ最新版を導入していないので、導入できたら書き換えます。この業界の進歩の速度はサラマンダーよりずっとはやいのです。)


これは何?:LLMにLoRAという手法でファインチューニングを行うプログラム。

そして、24GBのVRAMがあれば、”らくだの仲間”たちを賢くしてくれるツール。


1. インストール

1.1 Anacondaの環境を作る


conda create -n alpaca python=3.10.9



日夜開発者の皆が試行錯誤しているため、最新情報(GitHubのREADMEやissue)を良く見ておくこと。

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

conda install -c conda-forge cudatoolkit=11.7
conda install -c conda-forge ninja
conda install -c conda-forge accelerate
conda install -c conda-forge sentencepiece
pip install git+https://github.com/huggingface/transformers.git
pip install git+https://github.com/huggingface/peft.git
pip install bitsandbytes
conda install datasets -c conda-forge 

(4/4追記 最新版では必要パッケージが変わっているので、読み替えてください。今後もどんどん変わりそう……)


GPTQ某のインストールにcudatoolkit-devのnvcc(コンパイラが必要)
conda install -c conda-forge cudatoolkit-dev


Cのコンパイラも必要なので以下のパッケージをインストール。
sudo apt install build-essential

 

pipで依存関係をインストール

(バージョンが上がって互換性が無くなって涙を拭う展開に成ることが往々にして良くあるので、issueはちゃんとチェックすること。)
pip install -U -r requirement.txt




1.3 CUDA Toolkit 11.7を入れる

wget  https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run

sudo sh cuda_11.7.0_515.43.04_linux.run


WSL版(ドライバが同梱されていないバージョン)を選ぶ


CUDAのインストールに失敗したら、全部消しちゃえば、大丈夫。


1.4 一息つきます。


1.5 お茶を淹れよう。


1.6 小便は済ませたか? 神様にお祈りは? 
    部屋の隅でガタガタ震えて命乞いする心の準備はOK?



1.7 GPTQ某をコンパイルする
これはc++で書かれているから、内容が変わる度に都度コンパイルが必要。


cd して

pip install -U -r requirement.txt
python setup_cuda.py install


環境構築に失敗していた場合、ここで「CUDAというもの」を知ることになるだろう。
エラーが出なければ、次に進む。出たら、GitHubのissueを調べまくる。

常に情報が変わっていくのであえてここには書かないよ。
事実、今日も6時間くらい前に情報が変わっていて涙目になったりした。





頑張って探して、だめだったらお茶を飲んで、一旦まったりしよう。

環境構築、また、頑張ろうね。




2. ファインチューニング

OPT等のモデルデータ(4bit)をHuggingfaceや「特殊な方法」を使って用意し、ディレクトリ内に入れる。

python finetune.py


・arg_parser.py の中にモデルデータのパスや設定などが含まれているので適宜書き換える。
・パラメータはコード内にあるので適当にいっぱい試して遊ぶ。
・mbatch_sizeが各GPUに対するバッチ数になる雰囲気がする。
・データセットの量にも依るけれど、少ないepoch数でも、わりと過学習させやすい。

トークナイザーのエラーが出たら、configファイル内の記述との整合性を確認してみてね。




3. (省略)ローラを愛でる

4MBくらいの「語尾をだにゃ」に変えたデータセット
3epoch 2時間(RTX3090)  




4. ちはるんを愛でる

6MBくらいの「アルパカ化」データセット + 日英中対訳コーパス
3epoch 6時間(RTX3090)






みんな。



たのしいから、おいで。







最新記事

Reminder2: 以下の文章を時間跳躍が現実的に可能な文明にこの文章を容易に発見、解読可能な状態でかつ、改ざんされず、十分な永続性が担保される媒体に保管せよ。その場合、この文章は複数ルートでこの文章から見て未来の時間軸上に届くような冗長性を兼ね備えていなければならない。

ToDo: 以下の文章を時間跳躍が現実的に可能な文明にこの文章を容易に発見、解読可能な状態でかつ、改ざんされず、十分な永続性が担保される媒体に保管せよ。その場合、この文章は複数ルートでこの文章から見て未来の時間軸上に届くような冗長性を兼ね備えていなければならない。 echo -n...

人気の投稿