はじめに
日本語に特化したllmについて色々と調べていたのですが、ざっと下記のようにさまざまなものがあります。これらはまだllmとしては公開されているものの、普段活用しているようなソフトウェアには対応していないことが多く、動かしてみたいと思った時に、なかなか触るまでのハードルがあるのではないかと思います。
今回は、ローカル実行とhuggingfaceという仕組みを活用して、こうしたモデルを動かして簡単なチャットボットを作成するまでの手順を記載しておきます
(参考)日本語特化LLM一覧表 (Claudeに出してもらったので、一部誤りがある可能性があります、ご了承ください)
| 名前 | 特徴 | 発表年月 | 最大パラメータ数 |
|---|---|---|---|
| SB Intuitions LLM | ソフトバンク系、日本語特化国産最大規模、マルチモーダル対応 | 2024年11月 | 4,000億 |
| CyberAgentLM3 | スクラッチ開発、商用利用可能、Apache License 2.0 | 2024年7月 | 225億 |
| Stockmark-2-100B | ストックマーク開発、指示追従特化 | 2025年 | 1,000億 |
| PLaMo-100B | Preferred Networks開発、日英バイリンガル | 2024年 | 1,000億 |
| Stockmark-100b | ストックマーク開発、企業向け | 2024年 | 1,000億 |
| リコーLLM | 企業向けカスタマイズ特化、日本語精度重視 | 2024年1月 | 130億 |
| tsuzumi | NTT開発、軽量・高性能 | 2023年 | 非公開 |
| Swallow | 東京工業大学開発、Llama2ベース | 2023年 | 700億 |
| Llama-3.1-Swallow-8B | 東工大開発最新版、長文対応 | 2024年 | 80億 |
| CyberAgentLM2 | サイバーエージェント第2世代 | 2023年11月 | 70億 |
| Japanese StableLM | Stability AI Japan開発 | 2023年 | 70億 |
| ELYZA-japanese-Llama-2 | ELYZA開発、指示追従特化 | 2023年 | 700億 |
| PLaMo-13B | Preferred Networks開発、日英対応 | 2023年9月 | 130億 |
| Rinna GPT | rinna開発、会話特化 | 2023年 | 36億 |
| Tanuki-8B | 松尾研開発、合成データ活用 | 2024年 | 80億 |
| Calm2 | CyberAgent開発、推論能力重視 | 2023年 | 70億 |
| OpenCALM | CyberAgent開発、オープンソース | 2023年 | 70億 |
| WebLab-10B | 松尾研開発、ウェブデータ学習 | 2023年 | 100億 |
| Japanese-Alpaca | Stanford Alpacaの日本語版 | 2023年 | 130億 |
| Vicuna-13B-Japanese | UC Berkeley Vicunaの日本語版 | 2023年 | 130億 |
| Mistral-Nemo-Japanese | CyberAgent日本語チューニング、Mistralベース | 2024年 | 120億 |
| DeepSeek-Japanese | CyberAgent日本語版、高性能推論 | 2024年 | 140億 |
| llava-llama-3-8b | 視覚言語モデル、画像理解対応 | 2024年 | 80億 |
1 手元のmacで確認する方法
1.ollamaをダウンロードする
2.コマンド実行する(llama3.2:latestの3.2B/3.2億パラメーター)
$ ollama pull llama3.2
$ ollama run llama3.2
3.チャットを利用する
4.終了する
$ /bye
5.他のLLMを準備して実行させてみる
Sarashinaを使う場合。GGUF形式のものが必要なので、GGUFをつけて検索を行います。
Hugging Face → Models → 検索バーに「sarashina GGUF」と入力。ここでは、sarashina2.2-3b-instruct-v0.1-ggufを利用してみる。
$ ollama pull hf.co/mmnga/sarashina2.2-3b-instruct-v0.1-gguf
$ ollama run hf.co/mmnga/sarashina2.2-3b-instruct-v0.1-gguf
他のLLMを準備するときの注意点。
Hugging Face Hub に公開されているモデルであれば、公式ライブラリに登録されていなくても直接ダウンロードして実行可能。
https://huggingface.co/docs/hub/ollama
ollama run hf.co/{username}/{repository}
ただ、ライブラリに存在しないものを利用する場合は自分で変換が必要。変換手順は以下。
# 1. llama.cppをクローン
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# 2. ビルド
make
# 3. モデルをダウンロード
git lfs install
git clone https://huggingface.co/sbintuitions/sarashina2.2-3b-instruct-v0.1
# 4. GGUF形式に変換
python convert_hf_to_gguf.py sarashina2.2-3b-instruct-v0.1/ --outdir ./converted/
# 5. 量子化(オプション、サイズを小さくしたい場合)
./llama-quantize ./converted/ggml-model-f16.gguf ./converted/ggml-model-q4_0.gguf q4_0
6.serverで動かす場合
$ ollama serve
7.API Callしてみる
curl -X POST http://localhost:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "こんにちは"
}
]
}'
2.Huggingfaceで実行する方法
1. New -> Spaceを選択
2.必要な部分を埋める
3.filesで必要なファイルを確認
4.ファイルを編集 (app.pyとrequirements.txtを置き換える)
下記コードを参照
https://github.com/oggata/huggingface-chat-demo/tree/main
5.Appに戻って待つ
6.APIから使う
アプリの一番下に、「Use Via API」のリンクがあるので開くと、Python / JavaScript などからAPIのcall方法がわかる.
注意;UseVia APIの記述だとオプション数が足りていないので、下記のように6つのオプションをつけること
また返答はGradioの仕様として
"\u3053\u3093\u306b\u3061\u306f\uff01\u4eca\u65e5\u306f\u3069\u3046\u3057\u307e\u3057\u305f\u304b\uff1f"
のように返ってくるので
Unicodeエスケープをデコードする必要がある。
curl -X POST https://===spacename===/gradio_api/call/chat -s -H "Content-Type: application/json" -d '{
"data": [
"Hello!!","","You are a friendly and knowledgeable assistant. You carefully answer users questions.",512,0.7,0.95
]}' \
| awk -F'"' '{ print $4}' \
| read EVENT_ID; curl -N https://===spacename===/gradio_api/call/chat/$EVENT_ID
import json
response = '"\u3053\u3093\u306b\u3061\u306f\uff01\u4eca\u65e5\u306f\u3069\u3046\u3057\u307e\u3057\u305f\u304b\uff1f"'
decoded = json.loads(response)
print(decoded) #
注意点
スペースの最大は100Gまで
それ以上のLLMモデルを使う場合は
Inference API/Serverless Inference
を活用
(モデルをダウンロードせずにAPI経由でアクセス)
from huggingface_hub import InferenceClient
client = InferenceClient(
provider="together",
api_key="your_hf_token"
)
# 大規模モデルの利用
response = client.chat_completion(
model="meta-llama/Meta-Llama-3-70B-Instruct",
messages=[{"role": "user", "content": "Hello"}]
)
ただし、Sarashina2-70BとSarashina2-8x70Bの両方のモデルページで
「This model is not currently available via any of the supported Inference Providers.」と明記
のため、ローカルで動かすか、HuggingFaceのInference Endpointsなどを活用する
CyberAgent Open CALM 7Bなどを活用した事例を下記にサンプルとして残します
TODO 70Bも読み込みたい
# 利用可能なLLMモデル(Inference API対応確認済み)
self.models = {
# 日本語特化モデル(Inference API対応)
"cyberagent/open-calm-7b": "CyberAgent Open CALM 7B",
"rinna/japanese-gpt-neox-3.6b-instruction-sft": "Rinna GPT-NeoX 3.6B",
"matsuo-lab/weblab-10b-instruction-sft": "Matsuo Lab WebLab 10B",
"stabilityai/japanese-stablelm-instruct-alpha-7b": "Japanese StableLM 7B",
"tokyotech-llm/Swallow-7b-instruct-hf": "Swallow 7B Instruct (日本語対応)",
"elyza/ELYZA-japanese-Llama-2-7b-instruct": "ELYZA Japanese Llama 2 7B",
# 多言語対応・英語モデル(Inference API対応)
"microsoft/DialoGPT-large": "DialoGPT Large (対話特化)",
"bigscience/bloom-7b1": "BLOOM 7B (多言語)",
"mistralai/Mistral-7B-Instruct-v0.2": "Mistral 7B Instruct v0.2",
"microsoft/DialoGPT-medium": "DialoGPT Medium (対話特化)",
"HuggingFaceH4/zephyr-7b-beta": "Zephyr 7B Beta (対話特化)",
"NousResearch/Nous-Hermes-2-Yi-34B": "Nous Hermes 2 Yi 34B",
"upstage/SOLAR-10.7B-Instruct-v1.0": "SOLAR 10.7B Instruct",
# 70Bクラス(PRO/Enterprise向け)
"meta-llama/Meta-Llama-3.1-70B-Instruct": "Llama 3.1 70B Instruct (PRO)",
"meta-llama/Llama-2-70b-chat-hf": "Llama 2 70B Chat (PRO)",
"meta-llama/Meta-Llama-3-70B-Instruct": "Llama 3 70B Instruct (PRO)"
}
現状の課題としては、日本語専用のLLMで7Bを超える規模のものがInference APIに対応していない。なので、日本語LLMを動かすには、
- Dedicated Inference Endpoints
有料サービス: 専用インフラでllmを動かせる
完全制御: 自分の用途に最適化可能
- ローカル実行
高性能GPU: A100やH100などで直接実行
量子化: 4bit量子化などでリソース削減
などで行う必要があるのでは。





