5
4

低スペックなマシンでLlama-3-ELYZA-JP-8BをDifyで動かす

Last updated at Posted at 2024-07-14

はじめに

低スペックなローカルマシンで最近出た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に追記する。
具体的には以下の+行を追記。

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ポートの受信ルールを追加する。
image.png

Ollamaの準備

Ollama用のdocker-compose.yamlを作る。

touch docker-compose.yaml

中身に以下を記載する

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

中身は以下を記述する。

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のログイン画面に行くので、初期設定をする。

image.png

設定からモデルプロバイダーに行って、Ollamaを選び先ほど起ち上げたelyzaの8Bモデルを指定する。

Model NameとBase URLの指定は以下。

Model Name:elyza:8b-instruct
Base URL:http://host.docker.internal:11434

image.png

それで保存をする。あとはChatBotを構築し、RAGさせたいドキュメントをアップロードする。

ここでは、経済産業省のバイオエコノミー戦略の本文を投入してみる。
https://www8.cao.go.jp/cstp/bio/bio_economy.pdf

image.png

ナレッジからドキュメントを追加。

image.png

ChatBotからナレッジを追加

image.png

元ドキュメントのp47あたりの内容を聞いてみる。

image.png

image.png

という感じで一応RAGとして動かせた。
上記はデフォルトの経済的な方法でのナレッジ作成をしましたが、別途埋め込みモデルなどの指定してナレッジを作る場合についてはこちらの記事をご参考にしてください。

それではこの辺で。

参考文献

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4