mirror of
https://github.com/docker/docs.git
synced 2026-03-27 14:28:47 +07:00
dmr: add GHA example (#23136)
Add GHA workflow example for DMR --------- Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com>
This commit is contained in:
@@ -252,6 +252,8 @@ For more details, see the [`docker model package`](/reference/cli/docker/model/p
|
||||
|
||||
## Example: Integrate Docker Model Runner into your software development lifecycle
|
||||
|
||||
### Sample project
|
||||
|
||||
You can now start building your Generative AI application powered by the Docker Model Runner.
|
||||
|
||||
If you want to try an existing GenAI application, follow these instructions.
|
||||
@@ -272,6 +274,187 @@ You'll see the GenAI app's interface where you can start typing your prompts.
|
||||
|
||||
You can now interact with your own GenAI app, powered by a local model. Try a few prompts and notice how fast the responses are — all running on your machine with Docker.
|
||||
|
||||
### Use Model Runner in GitHub Actions
|
||||
|
||||
Here is an example on how to use Model Runner as part of a GitHub workflow.
|
||||
The example installs Model Runner, tests the installation, pulls and runs a model,
|
||||
interacts with the model via the API and finally deletes the model.
|
||||
|
||||
```yaml {title="dmr-run.yml", collapse=true}
|
||||
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"
|
||||
```
|
||||
|
||||
## FAQs
|
||||
|
||||
### What models are available?
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<button
|
||||
@click="collapse = true"
|
||||
x-show="!collapse"
|
||||
class="bg-blue mx-auto mt-4 flex items-center rounded-full px-2 text-sm text-white dark:bg-blue-500"
|
||||
class="chip mx-auto mt-4 flex items-center text-sm"
|
||||
>
|
||||
<span>Hide</span>
|
||||
<span class="icon-svg"
|
||||
|
||||
Reference in New Issue
Block a user