問題の概要:Ollama pullが途中で止まってしまう
Ollamaを使用して新しい言語モデルをダウンロード(pull)する際、以下のような問題に遭遇することがあります。
- ダウンロードの進行状況が表示された後、突然停止してしまう
- 「pulling manifest」や「pulling layers」の段階で進まなくなる
- エラーメッセージが表示されず、単にプロセスがハングする
- 以下のようなエラーメッセージが表示される:
Error: pull model manifest: Get "https://registry.ollama.ai/v2/library/llama2/manifests/latest": context deadline exceeded (Client.Timeout exceeded while awaiting headers) - ダウンロードが何度もリトライされるが、最終的に失敗する
この問題は、特に大規模なモデル(例:70Bパラメータのモデル)をダウンロードする際に発生しやすく、ユーザーを悩ませる一般的な課題です。
原因の解説:なぜpullが途中で止まるのか?
Ollamaのpullコマンドが途中で停止する主な原因は、以下の4つに分類できます。
1. ネットワーク接続の問題
Ollamaはデフォルトでregistry.ollama.aiからモデルをダウンロードします。不安定なネットワーク環境、プロキシ設定、ファイアウォールの制限などがあると、大容量ファイルのダウンロード中に接続が切断されることがあります。
2. タイムアウト設定
Ollamaにはデフォルトのタイムアウト設定があり、特に遅いネットワーク環境では、レイヤーのダウンロードやマニフェストの取得が時間内に完了せずに失敗します。
3. ディスク容量・権限の問題
モデルファイルは通常数GBから数十GBのサイズになります。ダウンロード先のディスクに十分な空き容量がない場合や、Ollamaが書き込み権限を持っていないディレクトリを使用している場合、途中で失敗することがあります。
4. Ollamaサーバーの問題
まれに、Ollamaのサーバー側に一時的な問題が発生している場合もあります。特に新しいモデルがリリースされた直後などは、サーバーへのアクセスが集中してダウンロードが不安定になることがあります。
解決方法:ステップバイステップで問題を解決する
ステップ1:基本的なトラブルシューティング
まず、以下の基本的なチェックを行います。
- インターネット接続の確認:他のサイトやサービスが正常に動作するか確認
- Ollamaサービスの再起動:
# Ollamaサービスの停止 ollama serve を実行している場合はCtrl+Cで停止 # またはシステムサービスとして実行している場合 sudo systemctl restart ollama # サービス再起動後、再度pullを試みる ollama pull llama2:7b
ステップ2:環境変数を使用したタイムアウト設定の調整
ネットワーク環境が遅い場合、タイムアウト値を増やすことで解決することがあります。
# Linux/macOSの場合
export OLLAMA_NOPRUNE=1
export OLLAMA_KEEP_ALIVE=24h
timeout 3600 ollama pull llama2:13b # 1時間のタイムアウト設定
# Windows (PowerShell)の場合
$env:OLLAMA_NOPRUNE=1
$env:OLLAMA_KEEP_ALIVE="24h"
ollama pull llama2:13b
OLLAMA_NOPRUNE=1は途中で失敗したダウンロードのキャッシュを保持し、OLLAMA_KEEP_ALIVEは接続を維持する時間を設定します。
ステップ3:ミラーサイトの使用
公式レジストリに問題がある場合、ミラーサイトを試してみます。
# 環境変数でミラーサイトを指定
export OLLAMA_HOST=https://ollama-mirror.example.com
# または起動時にホストを指定
OLLAMA_HOST=https://ollama-mirror.example.com ollama pull codellama:7b
注意:信頼できるミラーサイトのみを使用してください。公式の代替ミラーとして、一部の地域では地域固有のミラーが提供されていることがあります。
ステップ4:モデル指定の詳細化
タグを具体的に指定することで、マニフェストの取得の問題を回避できる場合があります。
# あいまいな指定(問題が発生しやすい)
ollama pull llama2
# 具体的なタグを指定(推奨)
ollama pull llama2:7b
ollama pull llama2:13b
ollama pull llama2:70b
# さらに特定のバージョンを指定
ollama pull llama2:13b-text-q4_0
ステップ5:レジストリキャッシュのクリア
破損したキャッシュが問題を引き起こしている可能性があります。
# Ollamaのキャッシュディレクトリを確認
ls ~/.ollama/models
# キャッシュの削除(注意:すべてのモデルを再ダウンロードする必要があります)
rm -rf ~/.ollama/models
# Windowsの場合
# C:Users[ユーザー名].ollamamodels を削除
# その後、再度pullを試みる
ollama pull mistral:7b
ステップ6:ダウンロードの再開と継続
途中で失敗したダウンロードを再開する方法:
# 1. まず、現在のダウンロード状況を確認
ollama list
# 2. 不完全なモデルを削除
ollama rm 不完全なモデル名
# 3. OLLAMA_NOPRUNEを設定して再試行
export OLLAMA_NOPRUNE=1
ollama pull モデル名:タグ
# 4. バックグラウンドで実行し、ログをファイルに出力
nohup ollama pull llama2:70b > download.log 2>&1 &
ステップ7:詳細ログの取得と分析
問題の根本原因を特定するために、詳細なログを取得します。
# デバッグモードでOllamaを起動
OLLAMA_DEBUG=1 ollama pull llama2:7b
# より詳細なログ
OLLAMA_DEBUG=1 OLLAMA_LOG_LEVEL=debug ollama serve &
ollama pull llama2:7b
# ログの出力例(問題特定に役立つ情報):
# [DEBUG] Fetching manifest for llama2:7b from https://registry.ollama.ai/v2/library/llama2/manifests/7b
# [INFO] downloading layer sha256:abc123... size: 2048MB
# [ERROR] Get "https://registry.ollama.ai/v2/...": context deadline exceeded
コード例・コマンド例:実践的な解決スクリプト
以下は、pullの問題を自動的に解決するためのシェルスクリプト例です。
#!/bin/bash
# ollama_pull_retry.sh - Ollama pullの自動リトライスクリプト
MODEL_NAME=${1:-"llama2:7b"}
MAX_RETRIES=5
RETRY_DELAY=30
echo "モデル '$MODEL_NAME' のダウンロードを開始します..."
for i in $(seq 1 $MAX_RETRIES); do
echo "試行 $i/$MAX_RETRIES"
# タイムアウトを設定してpullを実行
timeout 1800 ollama pull $MODEL_NAME
if [ $? -eq 0 ]; then
echo "✅ モデル '$MODEL_NAME' のダウンロードが成功しました!"
exit 0
else
echo "❌ 試行 $i が失敗しました。$RETRY_DELAY秒後に再試行します..."
if [ $i -lt $MAX_RETRIES ]; then
sleep $RETRY_DELAY
# 待機時間を増加(指数バックオフ)
RETRY_DELAY=$((RETRY_DELAY * 2))
fi
fi
done
echo "⚠️ 最大リトライ回数に達しました。手動での対応が必要です。"
echo "以下のコマンドを試してみてください:"
echo "1. ネットワーク接続を確認: ping registry.ollama.ai"
echo "2. ディスク空き容量を確認: df -h"
echo "3. 詳細ログで調査: OLLAMA_DEBUG=1 ollama pull $MODEL_NAME"
exit 1
このスクリプトの使用方法:
# 実行権限の付与
chmod +x ollama_pull_retry.sh
# デフォルトモデルで実行
./ollama_pull_retry.sh
# 特定のモデルを指定して実行
./ollama_pull_retry.sh "mistral:7b"
./ollama_pull_retry.sh "codellama:13b"
まとめ・補足情報
Ollamaのpullが途中で止まる問題は、主にネットワーク環境やシステム設定に起因しています。本記事で紹介した解決策を体系的に試すことで、ほとんどの場合で問題を解決できるはずです。
予防的な対策
- 安定したネットワーク環境:可能であれば有線接続を使用し、VPNやプロキシの影響を確認
- 十分なディスク容量:ダウンロード前に最低でもモデルサイズの2倍の空き容量を確保
- 適切なモデル選択:最初は小さいモデル(7Bパラメータなど)から始め、環境が安定していることを確認
- Ollamaの更新:定期的に最新バージョンに更新
# Ollamaのアップデート方法 curl -fsSL https://ollama.com/install.sh | sh # または既存インストールの更新 sudo apt update && sudo apt upgrade ollama # Ubuntu/Debian brew upgrade ollama # macOS
追加リソース
- 公式ドキュメント:Ollama GitHubリポジトリのIssuesセクションで類似の問題を検索
- コミュニティ:OllamaのDiscordサーバーや関連フォーラムで助けを求める
- 代替手段:どうしても解決しない場合は、モデルを直接ダウンロードして手動でインポートする方法も検討
# 手動でのモデルインポート例 ollama create mymodel -f ./Modelfile ollama run mymodel
Ollamaは急速に進化しているツールであり、定期的に改善が加えられています。問題が解決しない場合は、公式のIssueトラッカーで報告することで、開発チームの注意を引くことができ、将来のバージョンで修正される可能性があります。AIモデルのダウンロードには時間がかかることを理解し、忍耐強く対処することが、最終的には最も効果的なアプローチです。