はじめに
低スペックなローカルマシンで最近出たLlama-3-ELYZA-JP-8Bを動かしてRAGを作ってみました。
(他の記事をいろいろ参考にしています。まとめて参考文献としてリンクを下に置いています)
構築概要
- マシンの準備
- Azure VM (Standard B4ms :4 vcpu 数、16 GiB メモリ)
- Docker周りの準備
- Git周りの準備
- Difyの準備
- Ollamaの準備
- モデルの準備
- Llama-3-ELYZA-JP-8B-GGUF(cpuマシンで使うので量子化されているもの)
- DifyでRAGの構築
以下手順を説明していきます。
マシンの準備
今回はAzureのVMのStandard B4ms(4 vcpu 数、16 GiB メモリ)で実施しました。
VMを準備したら、アップデートして、Gitを入れて、Docker周りのセットアップ。
sudo apt update
# Git
sudo apt install -y git
# Docker
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
# Docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Difyの準備
まずはクローンしてくる。
git clone https://github.com/langgenius/dify.git
cd dify/docker
そのあとローカルのOllama(後述)が見えるようにdify/dockerにあるdocker-compose.yamlに追記する。
具体的には以下の+行を追記。
networks:
- ssrf_proxy_network
- default
+ extra_hosts:
+ - "host.docker.internal:host-gateway"
そうしたらDifyを起動させる。ホームディレクトリに戻る。
sudo docker-compose up -d
cd
Difyが見えるように、Azure側のVMのネットワーク設定で80ポートの受信ルールを追加する。
Ollamaの準備
Ollama用のdocker-compose.yamlを作る。
touch docker-compose.yaml
中身に以下を記載する
version: "3.8"
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./volumes/ollama:/root/.ollama
restart: always
Ollamaを起動させる
sudo docker-compose up -d
モデル(Llama-3-ELYZA-JP-8B)の準備
Hugging FaceからLlama-3-ELYZA-JP-8B-q4_k_m.ggufをダウンロードする。
wget https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/resolve/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf
Modelfileを作る
touch Modelfile
中身は以下を記述する。
FROM ./Llama-3-ELYZA-JP-8B-q4_k_m.gguf
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
OllamaのコンテナにモデルとModelfileをコピーをする。
sudo docker cp Modelfile ollama:/Modelfile
sudo docker cp Llama-3-ELYZA-JP-8B-q4_k_m.gguf ollama:/Llama-3-ELYZA-JP-8B-q4_k_m.gguf
モデルを作成して、実行する。
sudo docker exec -it ollama ollama create elyza:8b-instruct -f Modelfile
sudo docker exec -it ollama ollama run elyza:8b-instruct
DifyでRAGの構築
ブラウザにVMのIPアドレスを入れるとDifyのログイン画面に行くので、初期設定をする。
設定からモデルプロバイダーに行って、Ollamaを選び先ほど起ち上げたelyzaの8Bモデルを指定する。
Model NameとBase URLの指定は以下。
Model Name:elyza:8b-instruct
Base URL:http://host.docker.internal:11434
それで保存をする。あとはChatBotを構築し、RAGさせたいドキュメントをアップロードする。
ここでは、経済産業省のバイオエコノミー戦略の本文を投入してみる。
https://www8.cao.go.jp/cstp/bio/bio_economy.pdf
ナレッジからドキュメントを追加。
ChatBotからナレッジを追加
元ドキュメントのp47あたりの内容を聞いてみる。
という感じで一応RAGとして動かせた。
上記はデフォルトの経済的な方法でのナレッジ作成をしましたが、別途埋め込みモデルなどの指定してナレッジを作る場合についてはこちらの記事をご参考にしてください。
それではこの辺で。