はじめに
最近Llama 3.3を試してみたくなったので、MacBook M1で動かしてみた。ollamaを直接使う方法とDockerを使う方法の両方を試したので、その違いをまとめておく。
目次
前提条件
私の環境はこんな感じ。
- MacBook with M1/M2/M3チップ
- macOS Monterey以降
- インターネット接続(モデルのダウンロード用)
- 最低8GB RAM(16GB以上あると安心)
ollamaを使った方法
最初にollamaを試してみた。これが一番簡単だった。
1. Homebrewのインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 必要なツールをインストール
brew install php cmake ollama
3. Llama 3.3を動かしてみる
ollama run llama3.3
初回は結構時間がかかる。モデルをダウンロードしているから仕方ない。完了すると対話モードが始まる。
4. 次回以降
ollama run llama3.3
一度ダウンロードしてしまえば、次からはすぐに起動する。
5. APIとして使う
対話モードも良いけど、API経由で使いたい場合はこう。
ollama serve
別のターミナルから叩いてみる。
curl -X POST http://localhost:11434/api/generate -d '{
"model": "llama3.3",
"prompt": "M1 MacBookの特徴を教えてください"
}'
Dockerを使った方法
環境を汚したくない場合はDockerを使う。
1. Dockerのインストール
brew install --cask docker
2. Dockerを起動
open -a Docker
3. Llama 3.3をDockerで動かす
# ollamaのイメージをpull
docker pull ollama/ollama
# コンテナ起動
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# Llama 3.3の実行
docker exec -it ollama ollama run llama3.3
4. APIとして使う
Dockerの場合は最初からサーバーモードで動いているので、すぐにAPIが使える。
curl -X POST http://localhost:11434/api/generate -d '{
"model": "llama3.3",
"prompt": "M1 MacBookの特徴を教えてください"
}'
ollamaとDockerの比較
実際に両方使ってみた感想。
ollamaの良いところ
- とにかく簡単: インストールして即使える
- 軽い: Dockerのオーバーヘッドがない分、少し軽快
- 管理が楽: コマンド一発でモデル管理できる
- M1に最適化: Apple Siliconでの動作が安定している
-
更新も簡単:
ollama pull llama3.3だけ
Dockerの良いところ
- 環境が汚れない: システムに影響しない
- 再現性がある: 他の環境でも同じように動く
- 依存関係を気にしなくて良い: 全部コンテナに入ってる
- 削除が楽: 要らなくなったらコンテナごと消せる
- バージョン管理: 複数のバージョンを並行して使える
おすすめの使い方
個人的な感想だけど。
- とりあえず試したい: ollamaが楽
- 開発で使う: Dockerの方が良いかも
- メモリが少ない: ollamaの方が軽い
高度な使い方
APIの確認
ollamaのAPIは基本的に http://localhost:11434 で固定。
# 生きてるか確認
curl http://127.0.0.1:11434
GUIも使える
コマンドラインが面倒な時はGUIクライアントもある。
-
OpenWebUI:
pip install openwebui && python -m openwebui -
LM Studio:
https://lmstudio.ai/ からダウンロード
違うサイズのモデル
Llama 3.3は複数のサイズがある。
# 小さいモデル(メモリ8GBでも動く)
ollama run llama3.3:8b
# 大きいモデル(性能は良いがメモリを食う)
ollama run llama3.3:70b
PHPから使ってみる
PHPから叩く場合はこんな感じ。cURLを使うのが無難。
<?php
function callLlamaAPI($prompt, $model = 'llama3.3') {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:11434/api/generate');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'model' => $model,
'prompt' => $prompt,
'stream' => false
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$responseData = json_decode($response, true);
return $responseData['response'];
} else {
throw new Exception("APIが失敗した。HTTPコード: $httpCode");
}
}
// 使ってみる
try {
$result = callLlamaAPI('M1 MacBookの特徴を教えてください');
echo $result;
} catch (Exception $e) {
echo "エラー: " . $e->getMessage();
}
?>
まとめ
MacBook M1でLlama 3.3を動かす方法を2つ試してみた。
- とりあえず試すなら: ollama
- ちゃんと開発するなら: Docker
どちらもそれなりに使えるので、用途に合わせて選べば良いと思う。ローカルで動くのでプライバシーも安心だし、M1 MacBookなら結構サクサク動く。
とりあえずLlama 3.3、想像以上に良い感じだった。