見出し画像

WSL2でLLM-jpを試してみる

130億パラメータの大規模言語モデル「LLM-jp-13B」を構築~NII主宰LLM勉強会(LLM-jp)の初期の成果をアカデミアや産業界の研究開発に資するために公開~ - 国立情報学研究所 / National Institute of Informatics

これは、試すしかないですね。
RTX 4090 laptop (16GB)で動くかしら。

下準備

環境を作りましょう。

$ python -m venv llm-jp
$ cd $_
$ source bin/activate

pipで不足しているパッケージをインストールします。

$ pip install torch numpy transformers accelerate
$ pip list
Package                  Version
------------------------ ----------
accelerate               0.23.0
certifi                  2023.7.22
charset-normalizer       3.3.0
filelock                 3.12.4
fsspec                   2023.9.2
huggingface-hub          0.17.3
idna                     3.4
Jinja2                   3.1.2
MarkupSafe               2.1.3
mpmath                   1.3.0
networkx                 3.2
numpy                    1.26.1
nvidia-cublas-cu12       12.1.3.1
nvidia-cuda-cupti-cu12   12.1.105
nvidia-cuda-nvrtc-cu12   12.1.105
nvidia-cuda-runtime-cu12 12.1.105
nvidia-cudnn-cu12        8.9.2.26
nvidia-cufft-cu12        11.0.2.54
nvidia-curand-cu12       10.3.2.106
nvidia-cusolver-cu12     11.4.5.107
nvidia-cusparse-cu12     12.1.0.106
nvidia-nccl-cu12         2.18.1
nvidia-nvjitlink-cu12    12.3.52
nvidia-nvtx-cu12         12.1.105
packaging                23.2
pip                      22.0.2
psutil                   5.9.6
PyYAML                   6.0.1
regex                    2023.10.3
requests                 2.31.0
safetensors              0.4.0
setuptools               59.6.0
sympy                    1.12
tokenizers               0.14.1
torch                    2.1.0
tqdm                     4.66.1
transformers             4.34.1
triton                   2.1.0
typing_extensions        4.8.0
urllib3                  2.0.7

試してみよう

とりあえずはサンプルにあったプログラムで動かしてみます。
tokenizer.encodeでエラーにならないからちゃんと動いた気がします。

$ python
>>> import torch
>>> from transformers import AutoTokenizer, AutoModelForCausalLM
>>> tokenizer = AutoTokenizer.from_pretrained("llm-jp/llm-jp-13b-instruct-full-jaster-dolly-oasst-v1.0")
>>> model = AutoModelForCausalLM.from_pretrained("llm-jp/llm-jp-13b-instruct-full-jaster-dolly-oasst-v1.0", device_map="auto", torch_dtype=torch.float16)
>>>
>>> text = "自然言語処理とは何か"
>>> text = text + "### 回答:"
>>> tokenized_input = tokenizer.encode(text, add_special_tokens=False, return_tensors="pt").to(model.device)
>>> with torch.no_grad():
...     output = model.generate(
...         tokenized_input,
...         max_new_tokens=100,
...         do_sample=True,
...         top_p=0.95,
...         temperature=0.7,
...     )[0]
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:7 for open-end generation.
>>>

printすると…出ましたね。

>>> print(tokenizer.decode(output))
自然言語処理とは何か### 回答:自然言語処理とは、人間の言語を理解し、処理するコンピューター・プログラムのことである。自然言 語処理は、テキスト、音声、画像を含む様々な種類のデータを扱う。自然言語処理は、人間とコンピューター・システムの間のコミュニ ケーションに使用される。  自然言語処理の例としては、テキストを分析し、人間が読みやすいようにフォーマットし、検索エンジンで 検索できるようにするテキスト処理がある。自然言語
>>>

メモリの使用量とかはこんな感じ。いろいろ試してみるか。

$ nvidia-smi
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.41.03              Driver Version: 531.41       CUDA Version: 12.1     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                  Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf            Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 4090 L...    On | 00000000:02:00.0  On |                  N/A |
| N/A   45C    P8                7W /  N/A|  14895MiB / 16376MiB |      1%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|    0   N/A  N/A        26      G   /Xwayland                                 N/A      |
|    0   N/A  N/A     54981      C   /python3.10                               N/A      |
+---------------------------------------------------------------------------------------+

いいなと思ったら応援しよう!