WSL2でもAlpaca-LoRAを使いたい!(RAMが足りなくて挫折)
WSL2でAlpaca-LoRAを使いたい!でも、なんかエラーが出て動かんワロス!
オチがアレなので、最初に書いて置きます
GPU RAMが足りなくて、動かせませんでした\(^o^)/
ですが、一応、プログラムは動かせるようになったので、それのノウハウを書いて置きます。
Windowsでハイスペックパソコンを持っている方で、WSL2で動かしたいよぉ~という人は、参考にしてね!
初期状態で動かない理由
- WSL2の設定が不足していてGPUが動かせないようになってない
- bitsandbytesを改変していない
です。
1. WSL2の設定が不足
1番目については、Microsoft先生の公式ページか、
NVIDIA先生の解説ページに書いてあります。
この件については、ダウンロード&インストールするだけなので割と難しくはないです。
問題は、2番目のbitsandbytesです。
2. bitsandbytesを改変していない
はい。これは、マジでこけました。これの改善に、3日間をつぶしました。
参考資料
何をしたのか?
最初に言っておきますと、参考資料の内容を、素直にそのままやっても動きません。
まず出てくるバグですが、私の場合は2つほどありました。
- libcudart.soが読み込めない。
- 環境がGPUに対応してない
- MarkupSafeでsoft_unicodeが見つからない
バグの表示がこれなんです。1番はいいとして、2番はWSL2の設定が合っていても出てきます。
では、何が悪いのかというと、bitsandbytesです。
bitsandbytesが、環境に対応してないからGPUを参照出来てないです。
(この「うそつきぃぃ」とは言えないけど、ちょっとそんな感じ)
「libcudart.soが読み込めない」対策
パッケージをrootインストールしているなら、
/usr/local/lib/python3.8/dist-packages/bitsandbytes/cuda_setup/
あたりにmain.pyがあると思います。
これを改変します。
260行以降あたりに'/usr/local/cuda/lib64'というところを参照するように書いてありますが、この
文を、ifの外に置きます。(「Add」と囲っているところが、追加で書いたものです)
これをしないと後で警告が出て面倒なので、起きます。
ADD
なお、この時に書くパスは、CUDAのlibcudart.soファイルがあるところを書いてください。
「環境がGPUに対応してない」対策
375行以降あたりに、「CUDAが無効ならば'libsbitsandbytes_cpu.so'」とするとありますが、
これを「CUDAが有効ならば'libbitsandbytes_cuda***.so'とする」に変更します。
これ書き換えないと、正常にsoファイルを見てくれません。
REMOVE
if not torch.cuda.is_available(): return 'libsbitsandbytes_cpu.so', None, None, None, None
self.lib = ct.cdll.LoadLibrary(binry_path)
ADD
if torch.cuda.is_available(): return 'libbitsandbytes_cuda117.so', None, None, None, None
self.lib = ct.cdll.LoadLibrary(str(binary_path))
今回は、libbitsandbytes_cuda117.soの117はCUDAのバージョンのことを指しています。なので、自分の環境のバージョンに合わせてください。
下の「other」に確認・変更方法を書いて置きます。確認してね!
other
ちなみにCUDAのバージョンは、
下記で確認できます。
nvidia-smi
nvcc
下記で変更できます。
sudo update-alternatives –-config cuda
「MarkupSafeでsoft_unicodeが見つからない」対策
これは、WSL2関係ありませんが…
MarkupSafeのバージョン2.1.0から、soft_unicodeは無くなりました。
なので、それ以前のものを使う必要があります。
pip install markupsafe==2.0.0
こんな感じで、インストールしておけば大丈夫です。
オワリ!
終わりです。( ゚ω^ )ゝ 乙であります!
と言っても、自分の環境では完全に動かせなかったので、やや心残りですが…(´・ω・`)
Discussion