---
# System prepended metadata

title: Untitled

---

# 何もわからない人向けのローカル LLM 入門

## 対象

- なんとなく ChatGPT は使ったことある人
- ローカル LLM を聞いたことあるけどやったことない人

## ローカル LLM とは
OpenAIがAPIを公開してから、大規模言語モデル（以降LLMとします）は大きく進化してきました。この進化はOpenAIのAPIだけでなく、ローカルLLMも進化をしています。

ローカルLLMとは「一般向けにファイルとして公開されたモデル」で推論させる遊びです。APIは便利ですが、インターネットの接続が必要であったり、API提供側に依存する問題があります。ローカルLLMは自前で運用ができるため、APIにはないメリットや魅力があります。一方で、環境構築やマシンスペック等、少し始めるには高いハードルがあるのも事実です。

この記事は「取り敢えずローカルLLMを遊んでみて、なんとなくの空気感を把握する」ことを目的とします。

## 環境構築
APIを使わずに「公開されている LLM モデルのファイルで推論させる」ということになるので、自分でコードを書くか、ツールを探して推論させるかのどちらかが必要になります。今回は一々コードを書くのは面倒なので、text-generation-webui というツールを使います。

### text generation webui とは

Text generation web UI とは oobabooga 氏が作成した UI ツールです。インストールするとコーディングなしで推論や学習が UI 上でできるようになります。

作業用ディレクトリに以下の記述を書いた install.bat を作成し、実行してください。なお今回の記事は Windows ユーザを対象にしています。

```
git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
python -m venv venv
.\venv\Scripts\activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
python server.py
```

Mac の方は以下の install.sh を作成すれば大丈夫だと思います。

```
git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
python -m venv venv
./venv/Scripts/activate
pip install torch torchvision torchaudio
pip install -r requirements.txt
python server.py
```

以下のような表示が出たら成功です。
`Running on local URL:  http://127.0.0.1:7860`

### モデルのダウンロード

http://127.0.0.1:7860をブラウザで開くとWebUIが開きます。
Model タブを押し、モデルのダウンロードを行います。
Download model or LoRA 欄の上段に「TheBloke/calm2-7B-chat-GGUF」、下段に「calm2-7b-chat.Q2_K.gguf」を入力し、Donwload ボタンを押します。「Getting the download links from Hugging Face」ー＞「Downloading file to models/」と表示されるのでしばらく待ちます。このモデルは大体 3GB くらいです。「ready」と表示されたらダウンロード完了です。

### モデルの読み込み

Model の None の横にある左矢印ボタンを押し、モデルリストの更新（TOdo: スクショ撮る）を行い、Model を None から「calm2-7b-chat.Q2_K.gguf」に変更し、画面中央あたりにある「CPU」にチェックを入れてください。その後 Load を押すと読み込みが始まります。右側に「Successfully loaded calm2-7b-chat.Q2_K.gguf.」がでたらダウンロード完了です。

### 推論

Default タブを押すと、推論モードになります。左側にプロンプトを入れ、右側に結果が出る仕組みです。以下のように入れてみましょう。

```
USER: 日本とは何かを簡単に説明してください。
ASSISTANT:
```

これで推論ができました。


### モデルを変えてみる
では、モデルを変えてみます。
先程のmodel上段を「mmnga/cyberagent-calm2-7b-gguf」、下段を「cyberagent-calm2-7b-q2_K.gguf」にしてダウンロードしてみましょう。プロンプトを変えてみます。

```
日本の良いところについて教えてください。

```
結果出力されたものは以下でした。
```
日本の良いところについて教えてください。

|starttext|

--- 目次 ---

1. 日本の良いところを教えてください。
2. 日本の食事はどうですか？
3. 日本人は親切ですが、シャイだと思いますか？
4. 日本人の英語の発音が悪くて困っています（笑）。
5. 日本の文化についてどう思いますか？
6. 日本では何曜日が一番多いですか？（月曜日が多いとか？）
7. 日本は安全ですか？
8. 日本で一番難しい言葉は何語ですか？
9. 日本人と外国人はどちらが親切だと思いますか？
10. 日本に住んでいると日本語を覚えるのが大変ではありませんか？

11. 日本では何曜日が一番多いですか？（月曜日が多いとか？）
12. 日本の良いところについて教えてください。
13. 日本の食事はどうですか？
14. 日本人は親切ですが、シャイだと思いますか？
15. 日本人の英語の発音が悪くて困っています（笑）。
```
これだけだと回答できていないことがわかります。これは、先程まで使っていたモデルは、対話用にチューニングされているモデルのためです。チューニングされていない言語モデルを「baseモデル」、ユーザーの指示に受け答えできるようにしたモデルを「instructモデル」と呼んだりします。

Instructだけでなく、特定の用途に特化させたいときもチューニングを行います。特化させた用途に使うために、配布されたLLMをチューニングすることを「ファインチューニング」と呼びます。これは頑張れば一般人でも可能です。

### GPUで推論してみよう！
基本的にCPUよりもLLMはGPUで推論した方が速いです。
もしGPUを持っている人はModelタブでCPUのチェックを外し、n-gpu-layersを適度に上げてみてロードすると早くなることがわかります。
例：3090でn-gpu-layersを

## おまけ

### パラメータとは
パラメータとはモデルの「文章を生成する際に用いる調整可能な数値の総数」のことです。凄い雑に言うと、パラメータ数が多いほど、より多様で複雑なタスクを処理できるようになります。つまり1billionパラメータのモデルよりも、13billionパラメータのモデルの方が複雑なタスクができます。ただし、パラメタが大きいほど求められる計算資源（GPUのスペック）は多くなります。

### 色々なモデルがある
ローカル LLM の modelは「Hugging Face」というサイトで主に配布されています。たとえば先程の「TheBloke/calm2-7B-chat-GGUF」は[このページ](https://huggingface.co/TheBloke/calm2-7B-chat-GGUF)で配布されていたものです。他にも様々なモデルがあり、[このページ](https://github.com/llm-jp/awesome-japanese-llm)に大体まとまっています。

### ggufってなんですか？
本来、LLMを推論させるためにはGPUの計算資源を多く使います。これを無理やりCPUで推論しようとすると、どうしても推論速度が遅くなってしまいます。この状況を変えるためにCPUでLLMを動作させようとするプロジェクトが始まりました。

CPUで推論させることができれば、MacBook等でも動かせるようになります。これが[「llama.cpp」](https://github.com/ggerganov/llama.cpp)というプロジェクトです。llama.cppでは「gguf」という形式のモデルを使用します。この形式に変換する際、「量子化」という、推論精度を犠牲にしつつ、推論コストを下げる工程を行います。これによって、本来推論では不利なCPUでも推論ができるようになります。text-generation-webuiはllama.cppに対応しているので、ggufモデルを使用することができます。

「量子化」には様々なバリエーションがあります。今回使ったのはQ2_Kという、極端に質が低くなる一方でとても高速化される方法です。以下のページは、様々な量子化方法でgguf化された「calm2-7b-chat」が羅列されています。
https://huggingface.co/TheBloke/calm2-7B-chat-GGUF/tree/main
量子化バリエーションの説明は以下のページを参考にしてください。
https://note.com/bakushu/n/n1badaf7a91a0

