## 背景
ハマヒヨちゃんに使っているLLMがGPT-2で古すぎるので、新しいLLM使いたい。
ただ、サーバーがメモリ2GBのポンコツなので、色々量子化とか試して動かしたい。
まず普通にファインチューニング自体はColabでやるので、推論自体ができるかどうかを試したい。
## 方法
[Llama-3-Swallow: 日本語に強い継続事前学習モデル](https://zenn.dev/tokyotech_lm/articles/f65989d76baf2c)
これを動かしたい。
動かし方載ってないな。
[WSL2でLlama-3 Swallowを試してみる|noguchi-shoji](https://note.com/ngc_shj/n/nd02e29c0e53c)
ここを参考に動かすか。
いやllama.cpp使うんだった。
[非力なパソコンでもLLMを動かしたい!? llama.cppの紹介 | CyberAgent Developers Blog](https://developers.cyberagent.co.jp/blog/archives/45308/)
```bash
sudo apt -y update sudo apt -y install build-essential gcc g++ make pkg-config libopenblas-dev python3-pip
# llama.cppのダウンロード
mkdir llama.cpp && curl -L https://github.com/ggerganov/llama.cpp/archive/refs/tags/b1620.tar.gz | tar zx -C llama.cpp --strip-components=1 cd ~/llama.cpp
# ビルド
make -j 4 LLAMA_OPENBLAS=1
# テストもしておきます
make test LLAMA_OPENBLAS=1
pip3 install -r requirements-hf-to-gguf.txt
```
なんかtriton\==2.1.0がインストールできない。なぜ?
まぁわからんけど、requirements.txtに書いてあったやつを手でインストールした。
## WSL2に入れることにした
ポンコツサーバーじゃLlama3は動かない。メモリが足りなすぎる。メモリが16GBあるデスクトップで動かしてみる。
```bash
sudo apt update
sudo apt install build-essential cmake
pip install llama-cpp-python
```
```bash
wget https://huggingface.co/mradermacher/Llama-3.1-Swallow-8B-v0.1-i1-GGUF/resolve/main/Llama-3.1-Swallow-8B-v0.1.i1-Q4_K_S.gguf
```
```python
from llama_cpp import Llama
llm = Llama(model_path="./path/to/model")
out = llm("ひよたんは")
print(out)
```
これで一応動いたわ。後は、元のLlama3.1のやつをGGUF形式にする方法を調べて、それができたらColabでtrainするだけ。
```bash
python -c 'import huggingface_hub;
huggingface_hub.snapshot_download(repo_id="<model_name>", cache_dir="/path/to/modeldir")'
```
めちゃ時間かかる。
## Llama3.1をファインチューニング
なぜかトーカナイザーがNoneを吐くことがある。
sep_token_idが定義されてないだけだった。
なんか普通にVRAMが足りないわ。Unslothっていうやつを使うとメモリが削減できるらしい。
Unsloth入れたらできた。