![見出し画像](https://assets.st-note.com/production/uploads/images/119438319/rectangle_large_type_2_c667eae37543df7a6ee05a9f1fa40f3c.png?width=1200)
WSL2でLLM-jpを試してみる
これは、試すしかないですね。
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 |
+---------------------------------------------------------------------------------------+