LLM/Mistralへのプログラム・アクセスの調査記録

Share
目次
カテゴリのアイコン カテゴリ一覧 AI

LLM/Mistralへのプログラム・アクセスの調査記録

LLM/Mistralへのプログラム・アクセスの調査記録

更新日

Mistral モデルの導入手順

導入する Mistral のモデルとして 「TheBloke/Mistral-7B-Instruct-v0.2-GGUF」を採用。

また、プログラムでアクセスする方法として「llama.cpp (llama-cpp-python)」ライブラリを採用。

補足1:実行フレームワークについて

  • Mistral 社がホストしているモデルであれば、公式 SDK の「mistralai」が提供されている
  • ローカル環境向けには公式 SDK「mistral_inference」が提供されている。
    ※ Mistral-7B-Instruct-v0.3 モデルのページには mistral_inference の利用推奨を明記
    ただし、CPU 環境では NVIDIA ドライバ未検出等のエラーが発生し動作しない
  • Transformes による実行がモデルのページに記述されておりデファクトであった模様
  • 前述の Gemma のサンプルコードでモデル名を Mistral のモデルに変更すれば論理的には動作するはず
    ※ 非力なCPU環境では起動中にプロセスの強制 kill により停止
  • 軽量ライブラリの llama.cpp と量子化済みのモデルであれば CPU 環境でも動作

補足2:Mistral モデルについて

  • 小規模な汎用モデルとして Mistral 7B (Base / Instruct) が Hugging Face に公開されている
  • Mistral-7B-Instruct の最新版は v0.3 だが、サイズが 15GB~程ある
  • 量子化済みのモデルは v0.2 ベースで、Q4_K_M であればサイズは 4GB 程度

インストール手順

1. システム準備

sudo apt update && sudo apt upgrade -y
sudu apt install -y python3-venv python3-pip

2. 仮想環境準備

# 作業ディレクトリ作成
mkdir ~/hiprojects/mistral
cd ~/hiprojects/mistral

# 仮想環境作成
python3 -m venv venv
source venv/bin/activate

# パッケージのインストール
pip3 install llama-cpp-python fastapi uvicorn

3. 推論モデルのダウンロード

# カレントディレクトリの models 配下にダウンロード
wget https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.2-GGUF/resolve/main/mistral-7b-instruct-v0.2.Q4_K_M.gguf -P ./models/

ディレクトリサイズを確認して 4GB 程度であれば成功。

$ du -sh ./models
4.1G    ./models

4. 推論プログラムの作成

FastAPI に post エンドポイントを設定し、受け取った文字列を llama.cpp のライブラリで処理するサンプルコード。

# main.py

from fastapi import FastAPI, Request
from pydantic import BaseModel
from llama_cpp import Llama

# FastAPI の起動
app = FastAPI()

# ダウンロードしたファイルの格納先
MODEL_PATH = "./models/mistral-7b-instruct-v0.2.Q4_K_M.gguf"

# llama のインスタンス生成
llm = Llama(
  model_path=MODEL_PATH,
  n_ctx=2048,
  n_threads=1,
  verbose=False
)

class ChatInput(BaseModel):
  message: str

# エンドポイントの登録
@app.post("/api/v1/chat")
def chat(input: ChatInput):
  # プロンプトを生成
  prompt = f"[INST]{input.message}[/INST]"

  # 推論実行
  output = llm(
    prompt,
    max_tokens=128,
    temperature=0.7,
    stop=["</s>"],
    echo=False
  )

  # 推論結果の返却
  return { "response": output["choices"][0]["text"] }

5. 推論プログラムの起動/動作確認

uvicorn main:app --host 0.0.0.0 --port 8082

–host 0.0.0.0 の指定により WSL2 上のすべてのインターフェースを公開。ローカルでの確認であれば curl 等で http://localhost:8082/api/v1/chat にアクセスし応答を確認。

# Windows 11 の curl.exe の例
curl.exe -X POST http://localhost:8082/api/v1/chat -H "Content-Type: application/json" -d "{\"message\":\"こんにちは。調子はいかがですか\"}"

正常に動作すれば AI からの応答が得られます。日本語向けにチューニングされていないため文脈はおかしなところ多数。

{"response":" 私は英語言語でrespondしています。そのため、あなたの言葉を直接理解することはできません。しかし、「こんにちは」は「こんにちは、はじめまして」や「こんにちは、いつもお疲れ様です」などと翻訳されることが多いです。「はじめまして」は「お名前を知らず、お会計な"}
アバターのアイコン

この記事を書いた人

アバターのアイコン

inoue55