DMR の例
Docker Model Runner を使った完全なワークフローの例を見てみましょう。
サンプルプロジェクト
Docker Model Runner を活用して、独自の生成 AI アプリケーションを構築できます。
既存の GenAI アプリケーションを試したい場合は、次の手順に従ってください:
-
サンプルアプリをセットアップします。以下のリポジトリをクローンして実行します:
$ git clone https://github.com/docker/hello-genai.git
-
ターミナルで
hello-genai
ディレクトリに移動します。 -
run.sh
を実行すると、選択したモデルが pull され、アプリが起動します。 -
ブラウザでリポジトリの README に記載されたアドレスを開きます。
GenAI アプリのインターフェースが表示され、プロンプトを入力できるようになります。
これで、ローカルモデルを使った独自の GenAI アプリと対話できます。 いくつかプロンプトを試してみると、すべてが Docker 上でローカルに実行されているため、レスポンスが非常に高速であることに気づくでしょう。
GitHub Actions で Model Runner を使用する
以下は、GitHub ワークフローの一部として Model Runner を使用する方法の例です。 この例では、Model Runner のインストール、インストールテスト、モデルの pull と実行、API を通じたモデルとの対話、そしてモデルの削除を行います。
name: Docker Model Runner Example Workflow
permissions:
contents: read
on:
workflow_dispatch:
inputs:
test_model:
description: 'Model to test with (default: ai/smollm2:360M-Q4_K_M)'
required: false
type: string
default: 'ai/smollm2:360M-Q4_K_M'
jobs:
dmr-test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Set up Docker
uses: docker/setup-docker-action@v4
- name: Install docker-model-plugin
run: |
echo "Installing docker-model-plugin..."
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-model-plugin
echo "Installation completed successfully"
- name: Test docker model version
run: |
echo "Testing docker model version command..."
sudo docker model version
# Verify the command returns successfully
if [ $? -eq 0 ]; then
echo "✅ docker model version command works correctly"
else
echo "❌ docker model version command failed"
exit 1
fi
- name: Pull the provided model and run it
run: |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
echo "Testing with model: $MODEL"
# Test model pull
echo "Pulling model..."
sudo docker model pull "$MODEL"
if [ $? -eq 0 ]; then
echo "✅ Model pull successful"
else
echo "❌ Model pull failed"
exit 1
fi
# Test basic model run (with timeout to avoid hanging)
echo "Testing docker model run..."
timeout 60s sudo docker model run "$MODEL" "Give me a fact about whales." || {
exit_code=$?
if [ $exit_code -eq 124 ]; then
echo "✅ Model run test completed (timed out as expected for non-interactive test)"
else
echo "❌ Model run failed with exit code: $exit_code"
exit 1
fi
}
- name: Test model pull and run
run: |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
echo "Testing with model: $MODEL"
# Test model pull
echo "Pulling model..."
sudo docker model pull "$MODEL"
if [ $? -eq 0 ]; then
echo "✅ Model pull successful"
else
echo "❌ Model pull failed"
exit 1
fi
# Test basic model run (with timeout to avoid hanging)
echo "Testing docker model run..."
timeout 60s sudo docker model run "$MODEL" "Give me a fact about whales." || {
exit_code=$?
if [ $exit_code -eq 124 ]; then
echo "✅ Model run test completed (timed out as expected for non-interactive test)"
else
echo "❌ Model run failed with exit code: $exit_code"
exit 1
fi
}
- name: Test API endpoint
run: |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
echo "Testing API endpoint with model: $MODEL"
# Test API call with curl
echo "Testing API call..."
RESPONSE=$(curl -s http://localhost:12434/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d "{
\"model\": \"$MODEL\",
\"messages\": [
{
\"role\": \"user\",
\"content\": \"Say hello\"
}
],
\"top_k\": 1,
\"temperature\": 0
}")
if [ $? -eq 0 ]; then
echo "✅ API call successful"
echo "Response received: $RESPONSE"
# Check if response contains "hello" (case-insensitive)
if echo "$RESPONSE" | grep -qi "hello"; then
echo "✅ Response contains 'hello' (case-insensitive)"
else
echo "❌ Response does not contain 'hello'"
echo "Full response: $RESPONSE"
exit 1
fi
else
echo "❌ API call failed"
exit 1
fi
- name: Test model cleanup
run: |
MODEL="${{ github.event.inputs.test_model || 'ai/smollm2:360M-Q4_K_M' }}"
echo "Cleaning up test model..."
sudo docker model rm "$MODEL" || echo "Model removal failed or model not found"
# Verify model was removed
echo "Verifying model cleanup..."
sudo docker model ls
echo "✅ Model cleanup completed"
- name: Report success
if: success()
run: |
echo "🎉 Docker Model Runner daily health check completed successfully!"
echo "All tests passed:"
echo " ✅ docker-model-plugin installation successful"
echo " ✅ docker model version command working"
echo " ✅ Model pull and run operations successful"
echo " ✅ API endpoint operations successful"
echo " ✅ Cleanup operations successful"
関連ページ
Last updated on