ELYZA on WSL2に必要なハードウェア資源

一年以上前の2022年6月になるが、NVIDIAの佐々木さんが <a href="https://qiita.com/ksasaki/items/ee864abd74f95fea1efa">"待ってました CUDA on WSL 2" 記事</a>で、WSL2でCUDA利用が可能になったことを紹介して下さった。

当方も <a href="https://note.com/seiyotsuba/n/nf2aef3498705">"ちょっとした小細工" </a>によって、WSL2でTelsa P40が利用可能となった。そこでさっそく、最近評判のELYZA 7B版LLMを試してみた。

# まずはELYZAを試した感想

ELYZAはMetaのLlama2 7B版に対して追加事前学習により、日本語対応能力などを大幅向上させている。見たところHugging Faceで公開されているサンプルスクリプトはそのまま使えそうだったので、試しにそのまま実行させてみた。(当方、実はLLMやPythonの実利用は素人に近い)

<ul><li><a href="https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b">[Hugging Face] elyza/ELYZA-japanese-Llama-2-7b</a></li></ul>

transformersは必要そうなので、それだけは事前に準備しておいた。

```
pip install transformers
```

"クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。" の「クマ」を「ママ」や「パパ」に変えてみたら、箇条書きになったり、回答内容が大きく変化する。やはりプロンプト(入力データ)って大切なのだなあ... と痛感。

ちなみに「私は休暇を取得するノルマがあるけれども、忙しい職場なので肩身が狭い。私は主要メンバーなので休暇は痛手となる。職場のメンバーに快く受け入れられる言い訳を教えてください」と投げたら、いかに自分が重要な仕事をやっているかを宣伝しながら、重要プロジェクトなどを盾に休むといった回答が返ってきた。

微妙に質問のポイントを捉えていないようだったが、それは私が「自分が優秀」と盛り過ぎたのかもしれない。ただし日本語のやりとりはバッチリだし、GPT3.5相当というのは頷けるレスポンスであると感じた。ホント、すごい快挙であると吃驚した。

なおいかにも初心者的なミスだけれども、サンプルスクリプトを収納したファイルでしくじった。test.pyというファイルだったけれども、最初は「7行目に...」とエラーを吐いて動いてくれなかった。

```
python3 test.py
```

最初は「クマ」を「ママ」と書き換えたあたりで変な文字コードを入れてしまったのかと慌てたけれども、よくよく冷静になって確認してみたら、そもそもtest.pyファイル自体がShift-JISコードで保存されていた。UTF-8形式に変更して保存したら、無事に動いてくれた。

WSL2ってExploerからWSL2上のUbuntu 22.02にアクセス可能なので、ついついWindows版テキストエディタ(秀丸)を使ったのが敗因だった。いやはやお恥ずかしい。それにしても、WSL2でCUDAが使えるって便利ですねー (話題そらし)

![wsl2-linux.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3558027/d8ed21d1-6fbc-e4b0-68f5-1906dc8bba41.jpeg)

そうそう、話題が逸れるといえば返答がブツ切りになっているけれども、これはテスト用でCPU/GPUに負荷をかけないために短めに設定しているのかもしれない。先の "言い訳" 要望などもブツ切りだったので、max_new_tokensを256 → 1024へ変更したら、最後まで回答されるようになった。

```
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=256,
```

# 必要としたハードウェア資源など

で、こちらが肝心なハードウェア資源の話。結論からいうと、こんな感想を持った。

<ul>
<li>CPU：コンピュータの心臓：最高品を</li>
<li>マザーボード：CPUの活用要：最高品を</li>
<li>ネットワーク：大量データを落とす：最高品を</li>
<li>ストレージ：大量データを読み書き：最高品を</li>
<li>GPU：P40の24GBで十分だが倍精度演算は強化要？</li>
</ul>

そして今回の検証環境は、下記の通り。

<ul>
<li>CPU：Core i5 8500</li>
<li>マザーボード：ASRock Z370 Taichi</li>
<li>ネットワーク：オンボード無線LAN</li>
<li>ストレージ：10年前に購入した2.5インチSSD</li>
<li>GPU：NVIDIA Telsa P40 (Pascal)</li>
</ul>

![elyza-resource2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3558027/f0bf4ba4-4426-0ee8-abe4-517b6a415b87.jpeg)

真面目な感想としては、CPUに予想以上の高負荷がかかっていた。チャットボットやAIお姉さんを錬成しようと頑張る方々が、CPUスペックを重視するのは知っていた。実際にWindowsタスクマネージャを眺めていて、その通りなのだなあと実感した。

あとWSL2ではないネイティブUbuntu 22.04の時は有線LAN(ギガビットイーサ)だったけれども、無線LANはやたらと遅いと感じさせられた。ディスクも生成(推論)処理が始まるまで負荷がかかっていたようだし、なかなかLLMとはGPU以外も重要なのだという印象を受けた。

なおGPUはnvidia-smiで見ていた限りでは、Max 16GB消費で済んでいた。ネイティブUbuntuの14GBに比べると相当なVRAM消費だけれども、ともかくCUDAが動いてGPUが使えるという状況はありがたい。7B版であれば、十分に使えそうだといって良いだろう。

![elyza-xwayland.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3558027/400ad4bf-4218-5f57-0745-beede7fbf760.jpeg)


# 今後のこと

ELYZA 7B版 on WSL2 (with Telsa P40) が十分に使えそうだということは嬉しいことである。引き続き、いろいろと日本語性能や連携ソフトウェア利用を試してみたいと思う。

ただし... ELYZAはMeta Llama2の13B版や70B版に関しても、日本語対応を推進中と聞いている。13B版はNVIDIA Quadro RTX 8000 (48GB) でELYZA on WSL2もイケそうだけれども、さすがに70B版は手が出ない。

7B版で16GBということは、単純計算すると70Bで160GB... A100(80GB) やH100(80GB)が2～3枚は必要となってしまう。

うーん、さすがにWSL2環境で試す人は出て来ないかな。少なくとも我が家には購入以前に、設置スペースすら存在しないっす。

それでは今回は、この辺で。ではまた。