【Ollama】モデルpullが途中で止まる・失敗する問題の完全解決ガイド

問題の概要: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:基本的なトラブルシューティング

まず、以下の基本的なチェックを行います。

  1. インターネット接続の確認:他のサイトやサービスが正常に動作するか確認
  2. 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が途中で止まる問題は、主にネットワーク環境やシステム設定に起因しています。本記事で紹介した解決策を体系的に試すことで、ほとんどの場合で問題を解決できるはずです。

予防的な対策

  1. 安定したネットワーク環境:可能であれば有線接続を使用し、VPNやプロキシの影響を確認
  2. 十分なディスク容量:ダウンロード前に最低でもモデルサイズの2倍の空き容量を確保
  3. 適切なモデル選択:最初は小さいモデル(7Bパラメータなど)から始め、環境が安定していることを確認
  4. 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モデルのダウンロードには時間がかかることを理解し、忍耐強く対処することが、最終的には最も効果的なアプローチです。

この記事は役に立ちましたか?