使用Shell脚本实现多GPU上的Ollama模型自动部署

使用Shell脚本实现多GPU上的Ollama模型自动部署

在这里插入图片描述

在大规模AI应用场景中,我们经常需要在多个GPU上同时部署不同的语言模型。本文将介绍一个自动化部署脚本,用于在多个GPU上高效部署和管理Ollama模型。

功能特点

  • 自动停止已运行的Ollama服务
  • 支持多GPU并行部署
  • 自定义显存分配
  • 独立端口配置
  • 自动日志管理
  • 模型预热机制

脚本实现

基础配置

首先,我们定义了基本的运行参数:

# 指定使用的最后三块显卡 (GPU 5,6,7)
GPUS=(5 6 7)
PORTS=(11435 11436 11437)

模型配置

脚本支持三个不同的模型,每个都有特定的用途:

declare -A MODELS=(
    ["emotion"]="qwen:7b"
    ["main"]="ALIENTELLIGENCE/psychologistv2:latest"
    ["crisis"]="ALIENTELLIGENCE/mindpal:latest"
)

declare -A GPU_MEM=(
    ["emotion"]=10000
    ["main"]=10000
    ["crisis"]=9000
)

部署流程

  1. 环境准备

    • 停止现有Ollama服务
    • 创建日志目录
  2. 资源分配

    • 为每个模型分配专用GPU
    • 配置独立端口
    • 设置显存限制
  3. 服务启动

    • 设置环境变量
    • 启动Ollama服务
    • 模型预热
    • 日志重定向

监控和测试

监控命令

watch -n 1 nvidia-smi
tail -f ~/ollama_logs/*.log

API测试

每个模型都可以通过其专用端口访问:

# 情感分析模型测试
curl http://localhost:11435/api/generate -d '{"model": "qwen:7b", "prompt":"Hello"}'

# 主模型测试
curl http://localhost:11436/api/generate -d '{"model": "ALIENTELLIGENCE/psychologistv2:latest", "prompt":"Hello"}'

# 危机处理模型测试
curl http://localhost:11437/api/generate -d '{"model": "ALIENTELLIGENCE/mindpal:latest", "prompt":"Hello"}'

shell

#!/bin/bash
# run_models_on_last_gpus.sh

# 停止所有可能运行的 ollama 服务
pkill -f "ollama serve"

# 创建日志目录
mkdir -p ~/ollama_logs

# 指定使用的最后三块显卡 (GPU 5,6,7)
GPUS=(5 6 7)
PORTS=(11435 11436 11437)

# 模型配置
declare -A MODELS=(
    ["emotion"]="qwen:7b"
    ["main"]="ALIENTELLIGENCE/psychologistv2:latest"
    ["crisis"]="ALIENTELLIGENCE/mindpal:latest"
)

# 显存分配 (单位MB)
declare -A GPU_MEM=(
    ["emotion"]=10000
    ["main"]=10000
    ["crisis"]=9000
)

# 启动计数器
COUNT=0

# 循环启动模型
for MODEL_NAME in "${!MODELS[@]}"; do
    GPU_ID=${GPUS[$COUNT]}
    PORT=${PORTS[$COUNT]}
    MODEL=${MODELS[$MODEL_NAME]}
    MEM=${GPU_MEM[$MODEL_NAME]}

    echo "启动 $MODEL_NAME 模型 (GPU $GPU_ID, 端口 $PORT, 显存 ${MEM}MB)..."

    # 设置环境变量
    export CUDA_VISIBLE_DEVICES=$GPU_ID
    export OLLAMA_HOST="0.0.0.0:$PORT"
    export OLLAMA_NUM_GPU=1

    # 启动服务
    nohup ollama serve > ~/ollama_logs/${MODEL_NAME}.log 2>&1 &

    # 等待服务初始化
    sleep 15

    # 运行模型并预热显存
    ollama run $MODEL >/dev/null 2>&1 &

    # 显示启动信息
    echo "  -> $MODEL_NAME 模型已部署在 GPU $GPU_ID (端口 $PORT)"
    echo "  -> 日志文件: ~/ollama_logs/${MODEL_NAME}.log"
    echo "  -> 显存分配: ${MEM}MB"

    # 增加计数器
    ((COUNT++))
done

echo -e "\n所有模型已启动!"
echo "使用的显卡: GPU ${GPUS[0]}, ${GPUS[1]}, ${GPUS[2]}"
echo "监控命令:"
echo "  watch -n 1 nvidia-smi"
echo "  tail -f ~/ollama_logs/*.log"
echo "测试命令:"
echo "  curl http://localhost:11435/api/generate -d '{\"model\": \"qwen:7b\", \"prompt\":\"Hello\"}'"
echo "  curl http://localhost:11436/api/generate -d '{\"model\": \"ALIENTELLIGENCE/psychologistv2:latest\", \"prompt\":\"Hello\"}'"
echo "  curl http://localhost:11437/api/generate -d '{\"model\": \"ALIENTELLIGENCE/mindpal:latest\", \"prompt\":\"Hello\"}'"

最佳实践

  1. 显存管理

    • 根据模型大小合理分配显存
    • 预留足够系统资源
  2. 错误处理

    • 使用日志文件追踪问题
    • 定期检查服务状态
  3. 性能优化

    • 模型预热减少首次请求延迟
    • 独立端口避免资源竞争

性能对比

优化前

  • 所有模型共用第一块GPU
  • 三个模型的串行调用耗时4-5分钟
  • GPU资源利用率不均衡
  • 模型之间存在资源竞争

优化后

  • 每个模型独占一块GPU
  • 三个模型并行调用仅需10秒左右
  • GPU资源利用率优化
  • 消除了模型间的资源竞争
  • 响应时间提升约30倍

总结

这个脚本提供了一个灵活且可扩展的解决方案,用于在多GPU环境中部署和管理Ollama模型。通过合理的资源分配和自动化配置,不仅大大简化了模型部署流程,提高了运维效率,更实现了显著的性能提升。多GPU并行部署策略将响应时间从原来的4-5分钟优化到了10秒左右,极大地提升了系统的实用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老大白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值