Meta Llama 4 Scout/Maverick 実践ガイド — MoEアーキテクチャの仕組みとOllama/API活用のすべて【2026年3月最新】
2026年3月中旬、Metaが「Llama 4」ファミリーをリリースしました。
発表を見て、最初に思ったのは「10Mトークンのコンテキスト」という数字でした。GPT-4oの128Kの約78倍。ちょっと桁が違いすぎて、現実感がわかないくらいです。でも、ちゃんと調べていくと、「すごいけど、そのすごさはどこにあるのか」が見えてきて、むしろ使い方の解像度が上がりました。
この記事では、Llama 4の技術的な仕組みから、実際に手元で動かすまでの具体的な手順を整理しています。「発表は知ってるけど、実際どう使えばいいのか分からない」という方に特に役立てていただけると思います。
目次
- Llama 4が変えたこと — MoEアーキテクチャという設計思想
- Scout vs Maverick — どちらを選ぶか
- ハードウェア要件の実態 — 「17Bアクティブ」の罠
- Ollamaでローカル実行する — 最速セットアップ
- PythonからAPI経由で使う — Groq / Together AI
- 実践的なユースケース — RAG・長コンテキスト・マルチモーダル
- ライセンスと商用利用の注意点
1. Llama 4が変えたこと — MoEアーキテクチャという設計思想
Llama 3.1が70Bの「密なモデル(Dense Model)」だったとすると、Llama 4は「疎なモデル(Sparse Model)」と表現できます。
Dense(密)とSparse(疎)、この違いがLlama 4の本質です。
Dense Modelの仕組み
従来のLlama 3.1 70Bは、1トークンを処理するたびに全70Bのパラメータを使います。どんな単純な質問に対しても、フル稼働。これはシンプルで予測しやすいですが、コンテキストが長くなるとメモリとコンピューティングが比例して増えます。
MoE(Mixture of Experts)の仕組み
MoEは、内部に複数の「エキスパート」と呼ばれるサブネットワークを持ちます。各トークンを処理するとき、「ルーター」が最適なエキスパートを選択し、選ばれたエキスパートだけが処理を行います。
Llama 4 Scoutを例にすると:
- 総パラメータ数: 109B
- 1トークンあたりのアクティブパラメータ: 17B(16の専門エキスパート + 1つの共有エキスパート)
- 残りの約92Bのパラメータは、そのトークン処理では休んでいる
つまり、計算効率は17Bクラスでありながら、多様な専門知識を持つ109Bの表現力を保てるというのが理論上の利点です。
この設計によって、Llama 4は従来の Dense モデルとは異なるトレードオフをもたらします。
Dense (Llama 3.1 70B):
処理量: 70B パラメータ × トークン数
メモリ: 70B分 固定
MoE (Llama 4 Scout):
処理量: 17B パラメータ × トークン数 ← 計算は軽い
メモリ: 109B分 必要 ← ここが重い
計算は軽くなりますが、全エキスパートをメモリに載せておく必要があるため、VRAMの要件は総パラメータ数に比例します。これが後述する「17Bアクティブの罠」につながります。
なお、アーキテクチャの変更はこれだけではありません。Llama 4はネイティブにマルチモーダル(テキスト + 画像)に対応した最初のLlamaシリーズです。Llama 3.2 VisionはVision Adapterを後付けした設計でしたが、Llama 4はアーキテクチャ自体がマルチモーダルを前提に設計されています。
2. Scout vs Maverick — どちらを選ぶか
Llama 4ファミリーの現時点での主な2モデルを比較します(Behemothは2Tパラメータのモデルですが、2026年3月時点ではプレビュー段階です)。
| 項目 | Scout | Maverick |
|---|---|---|
| 総パラメータ | 109B | 400B |
| アクティブパラメータ | 17B | 17B |
| エキスパート数 | 16+1 (共有) | 128+1 (共有) |
| 最大コンテキスト | 10Mトークン | 1Mトークン |
| 最小VRAM (BF16) | 218 GB | 804 GB |
| 最小VRAM (FP8) | 110 GB | 400 GB |
| 最小VRAM (INT4) | 55 GB | ~200 GB |
| 単一GPU運用 | 可(INT4 on H100 80GB) | 不可 |
| マルチモーダル | 対応 | 対応 |
| 品質ティア | 高い | より高い |
数字だけ見ると、Maverickのほうが8倍のエキスパートを持つだけあって品質で勝ります。ただし、必要なハードウェアも8倍ほど重くなります。
Scoutを選ぶべき状況
- 長いドキュメントの処理(100Kトークン以上)
- RAGのコーパスが巨大(数十万トークン規模)
- 単一GPUで動かしたい(コスト・運用のシンプルさ)
- プロトタイピングや個人プロジェクト
- コスト制約がある
Maverickを選ぶべき状況
- 品質が最優先(GPT-4クラスと競合するタスク)
- 複雑な推論・繊細なテキスト生成
- 8×H100以上のインフラが確保できる組織
- ベンチマーク重視の評価環境
現実的には、個人・スタートアップ・中小チームの多くはScoutが出発点になるでしょう。Scoutの10Mトークンコンテキストは、GPT-4oの128Kとは次元が違う体験をもたらします。
3. ハードウェア要件の実態 — 「17Bアクティブ」の罠
Llama 4の発表で最も誤解が広がったのが、「アクティブパラメータ17B」という表現です。
「17BってLlama 3.1 17Bと同じくらいのVRAMで動くんじゃないか」と思うのは、ごく自然な反応だと思います。でも、それは違います。
なぜ罠か
VRAMの消費量は、アクティブなパラメータ数ではなく、総パラメータ数に基づきます。MoEモデルでは、全エキスパートをメモリに展開しておく必要があるからです。
# メモリ消費の概算(実際はKVキャッシュ等で変動)
# BF16精度: 1パラメータ = 2バイト
scout_bf16_vram = 109e9 * 2 / 1e9 # ≈ 218 GB
# FP8精度: 1パラメータ = 1バイト
scout_fp8_vram = 109e9 * 1 / 1e9 # ≈ 110 GB
# INT4精度: 1パラメータ = 0.5バイト
scout_int4_vram = 109e9 * 0.5 / 1e9 # ≈ 55 GB
Scoutの実用的なハードウェア構成
| 精度 | 必要VRAM | 最小構成 | 実用コンテキスト |
|---|---|---|---|
| BF16 | ~218 GB | 4×H100 80GB | 1M+ |
| FP8 | ~110 GB | 2×H100 80GB | 500K+ |
| INT4 | ~55 GB | 1×H100 80GB | ~130K |
INT4量子化であれば、H100 80GB 1枚で動きます。品質はBF16から若干落ちますが、ドキュメント処理やRAGのような用途では実用的なレベルを保ちます。
クラウドAPIを使う場合
自前のGPUインフラが不要なAPI経由であれば、これらのハードウェア制約は気にしなくていいです。GroqやTogether AIがScout/Maverickを提供しており、ノートPCから呼び出せます。
4. Ollamaでローカル実行する — 最速セットアップ
コンシューマー向けGPU(RTX 4090など)では上記の要件を満たしません。ただ、Ollamaの量子化版(約12GB)で気軽に試す方法があります。
インストール
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows
# https://ollama.com からインストーラーをダウンロード
Llama 4 Scoutを起動
# 量子化版(約12GB)をダウンロードして起動
ollama run llama4:scout
# モデル一覧の確認
ollama list
起動すると、ターミナル上でチャット形式のインタフェースが開きます。
Pythonから呼び出す(Ollamaライブラリ使用)
import ollama
# テキスト生成
response = ollama.chat(
model='llama4:scout',
messages=[
{
'role': 'user',
'content': 'Pythonで簡単なWebスクレイパーを書いてください。',
}
]
)
print(response['message']['content'])
ストリーミング対応
import ollama
stream = ollama.chat(
model='llama4:scout',
messages=[{'role': 'user', 'content': 'MoEアーキテクチャを100文字で説明して'}],
stream=True,
)
for chunk in stream:
print(chunk['message']['content'], end='', flush=True)
print()
画像を渡すマルチモーダル利用
import ollama
import base64
from pathlib import Path
# 画像をbase64エンコード
image_path = Path('./sample.png')
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode()
response = ollama.chat(
model='llama4:scout',
messages=[
{
'role': 'user',
'content': 'この画像に何が写っていますか?',
'images': [image_data]
}
]
)
print(response['message']['content'])
OllamaはOpenAI互換のREST APIも提供しているので、既存のOpenAI SDKがそのまま使えます。
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1',
api_key='ollama', # 任意の文字列
)
response = client.chat.completions.create(
model='llama4:scout',
messages=[
{'role': 'user', 'content': 'Pythonのリスト内包表記を説明して'}
]
)
print(response.choices[0].message.content)
OpenAIクライアントを使っているアプリケーションのエンドポイントをローカルに向けるだけで、Llama 4に差し替えられるのは便利だと思います。
5. PythonからAPI経由で使う — Groq / Together AI
自前のGPUがなくても、クラウドAPI経由でScout/Maverickを使えます。
Groqを使う場合
from groq import Groq
client = Groq(api_key="your-groq-api-key")
completion = client.chat.completions.create(
model="llama-4-scout-17b-16e-instruct",
messages=[
{
"role": "system",
"content": "あなたは技術的な質問に答えるアシスタントです。"
},
{
"role": "user",
"content": "Pythonでシンプルなタスクキューを実装してください。"
}
],
temperature=0.7,
max_tokens=2000,
)
print(completion.choices[0].message.content)
Together AIを使う場合
import together
client = together.Together(api_key="your-together-api-key")
response = client.chat.completions.create(
model="meta-llama/Llama-4-Scout-17B-16E-Instruct",
messages=[
{"role": "user", "content": "FastAPIでRESTful APIのサンプルを作成して"}
],
max_tokens=3000,
temperature=0.6,
)
print(response.choices[0].message.content)
ストリーミング対応(Together AI)
import together
client = together.Together(api_key="your-together-api-key")
stream = client.chat.completions.create(
model="meta-llama/Llama-4-Scout-17B-16E-Instruct",
messages=[
{"role": "user", "content": "Dockerコンテナのベストプラクティスを教えて"}
],
max_tokens=2000,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if hasattr(delta, 'content') and delta.content:
print(delta.content, end='', flush=True)
print()
どちらもOpenAI互換のインタフェースなので、コードの変更は最小限に抑えられます。
6. 実践的なユースケース — RAG・長コンテキスト・マルチモーダル
技術を理解したうえで、どこに使えるかを考えてみましょう。
6-1. 大規模ドキュメントのRAG
Scoutの10Mトークンコンテキストは、RAGの設計に大きな影響を与えます。
従来のRAGは、コンテキストが短いため、「検索して関連チャンクだけ渡す」という設計が必要でした。でも10Mトークンあれば、中小規模の文書データベースをまるごとプロンプトに入れることも検討できます。これを「Long Context RAG」と呼ぶこともあります。
from pathlib import Path
def load_documents(folder: str) -> str:
"""フォルダ内のテキストファイルを全て読み込んで結合"""
docs = []
for path in Path(folder).rglob("*.txt"):
content = path.read_text(encoding="utf-8")
docs.append(f"--- {path.name} ---\n{content}")
return "\n\n".join(docs)
def query_documents(question: str, docs: str, client, model: str) -> str:
"""ドキュメント全体を渡してクエリに回答"""
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "system",
"content": "以下のドキュメントを参照して、質問に答えてください。\n\n" + docs
},
{
"role": "user",
"content": question
}
],
max_tokens=1000,
)
return response.choices[0].message.content
# 使用例
from groq import Groq
client = Groq(api_key="your-groq-api-key")
docs = load_documents("./knowledge_base")
answer = query_documents(
question="プロジェクトの設計方針について教えてください",
docs=docs,
client=client,
model="llama-4-scout-17b-16e-instruct"
)
print(answer)
6-2. 長いコードベースの解析
コードレビューや依存関係の解析でも、長コンテキストは活きます。
import subprocess
def get_repo_code(repo_path: str, extensions: list[str]) -> str:
"""リポジトリのコードをまとめて読み込む"""
code_parts = []
for ext in extensions:
result = subprocess.run(
['find', repo_path, '-name', f'*.{ext}', '-not', '-path', '*/node_modules/*'],
capture_output=True, text=True
)
for file_path in result.stdout.strip().split('\n'):
if file_path:
try:
content = Path(file_path).read_text(encoding="utf-8")
rel_path = file_path.replace(repo_path, '')
code_parts.append(f"```{ext}\n# {rel_path}\n{content}\n```")
except Exception:
pass
return "\n\n".join(code_parts)
# 使用例
code = get_repo_code("/path/to/your/project", ["py", "ts", "json"])
# Scout の長コンテキストにコード全体を渡してレビュー依頼
6-3. 画像 + テキストの組み合わせ処理
Llama 4のネイティブマルチモーダル対応を活用した例です。
import base64
import ollama
def analyze_image_with_context(
image_path: str,
additional_context: str,
question: str
) -> str:
"""画像と追加テキストコンテキストを組み合わせて解析"""
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode()
prompt = f"{additional_context}\n\n{question}"
response = ollama.chat(
model='llama4:scout',
messages=[
{
'role': 'user',
'content': prompt,
'images': [image_data]
}
]
)
return response['message']['content']
# 使用例: ダッシュボードのスクリーンショットを分析
result = analyze_image_with_context(
image_path="./dashboard_screenshot.png",
additional_context="これは月次売上ダッシュボードです。前年比較が含まれています。",
question="グラフから読み取れる主要なトレンドは何ですか?"
)
print(result)
7. ライセンスと商用利用の注意点
Llama 4のライセンスには、Llama 3系と異なる注意点があります。
EUユーザーへの制限
Llama 4のライセンスには、EUに拠点を置く企業・個人の商用利用を制限する条項が含まれています。これはLlama 3系にはなかった制限で、発表後すぐにEUのAI開発者コミュニティで議論になりました。
日本からの利用について
この制限は日本には適用されません。日本の個人・企業は、Llama 4を商用プロジェクトで自由に利用できます(ライセンスの他の条件に従う必要はあります)。
月間アクティブユーザー制限
Llama 3系と同様、月間アクティブユーザーが7億人を超えるサービスに使う場合は、Metaとの別途ライセンス契約が必要です。通常の個人・中小企業の用途では関係ありません。
正式なライセンス確認先
https://www.llama.com/llama4/license/
利用前にライセンス全文を確認することをお勧めします。特にEUに拠点を持つ組織は慎重に確認してください。
まとめ
Llama 4で特に印象的なのは、Scout の10Mトークンコンテキストです。RAGの設計思想そのものを変える可能性があると思っています。
まとめると:
- MoEアーキテクチャ = 計算効率と多様な専門性を両立する設計
- Scout = 10Mトークン、単一GPU可、個人・スタートアップ向け
- Maverick = より高品質、8×H100以上が必要、組織向け
- ローカル実行 = OllamaでINT4量子化版(約12GB)から試せる
- API利用 = Groq / Together AI でGPU不要
- 日本からの商用利用 = 制限なし(EUへの制限はあるが日本は対象外)
Ollamaを入れるだけで試せるので、まずは ollama run llama4:scout から始めてみるのがいいかと思います。長コンテキストの体験は、試してみて初めて実感できる部分が大きいです。