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

article/2025/6/9 5:33:19

使用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[@]}"; doGPU_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_IDexport 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++))
doneecho -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秒左右,极大地提升了系统的实用性。


http://www.hkcw.cn/article/dYakEMrOXw.shtml

相关文章

Apdex评分从3级到5级标准划分思路详解

什么是 Apdex APdex (Application Performance Index)‌是一个用于评估应用性能的工业标准,也被称为 满意度,广泛应用于性能监控和优化。由 Apdex联盟开发,它从用户的角度出发,将应用响应时间的表现,转化为…

MATLAB 绘制带误差棒的拟合图:从入门到精通

在科学研究和工程实践中,数据可视化是理解数据特性、验证模型假设的重要手段。今天,我们来深入探讨一种极具价值的数据可视化形式——带误差棒的拟合图,并手把手教你如何用 MATLAB 实现它。 一、什么是带误差棒的拟合图 带误差棒的拟合图是…

[面试精选] 0206. 反转链表

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 206. 反转链表 - 力扣(LeetCode) 2. 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 3. 题目示例 示例 1 :…

“香会”现场,中方代表发声!

第22届香格里拉对话会正在新加坡举行中国人民解放军国防大学代表团成员张弛在现场回应一系列焦点问题解放军打“独”促统不停步!在今年的香格里拉对话会上,台湾问题多次被提及。对此,张弛表示,“台独”分裂与台海和平是水火不容的,赖清德当局一年多来大肆挑动两岸的对立对…

乌总统顾问:备忘录未来实施恐困难重重

俄罗斯方面5月30日称,俄代表团已经准备好在6月2日与乌克兰开启第二轮谈判,希望双方能就和平协议备忘录内容进行讨论。乌克兰官员5月31日表示,由于俄罗斯未公开备忘录内容,乌方猜测大概率与俄方官员此前声明并无差异,未来实施备忘录内容可能困难重重。乌克兰总统办公室主任…

夺冠、庆祝、然后被捕……昨夜巴黎街头如“战场”

5月31日,法甲球队巴黎圣日耳曼5比0大胜意甲球队国际米兰,捧起本赛季欧冠联赛冠军奖杯。彻夜狂欢的法国球迷聚集在巴黎香榭丽舍大街及“大巴黎”主场王子公园一带。据巴黎警方消息,至午夜已有至少81人因滋事被捕。户外烟花声、鸣笛声、欢呼声不绝于耳,间或传来警笛声。据法媒…

基于联咏平台NT985XX 编码配置及常见问题解析

一、概述 hd_videoenc 的主要目的是从上层单元获取图像原始数据,并控制视频编码器对该图像进行编码,输出码流后可用于保存档案或进行在线串流。 二、HDAL interface介绍 这部分可以直接参考 video_record.c 这支 sample code, 开启与关闭…

【PCI】PCI入门介绍(包含部分PCIe讲解)

先解释一下寻址空间: 机器是32bit的话,意味着4G(2的32次方)寻址空间,内存条作为它的实际物理存储设备。大部分在跑内存程序运行,少部分用来存放其他东西。这是一个常见的4G寻址空间分布(不一定是…

中方批美印太战略:除了挑事端搞乱亚太毫无建树

中方批美“印太战略”:除了挑事端 搞乱亚太 毫无建树5月31日,在新加坡出席香格里拉对话会的中国国防大学教授孟祥青在接受总台记者采访时表示,美国在对话会中制造地区分裂,但是东盟国家更关注合作和发展,这才是地区国家的共同心声。var chan_v_w = 960,chan_v_h = 540,cha…

【NLP 78、手搓Transformer模型结构】

你以为走不出的淤泥,也迟早会云淡风轻 —— 25.5.31 引言 ——《Attention is all you need》 《Attention is all you need》这篇论文可以说是自然语言处理领域的一座里程碑,它提出的 Transformer 结构带来了一场技术革命。 研究背景与目标 在 Transfo…

Attention GhostUNet++ 混合的U-Net

最近看到一个全新的分割网络,虽然这个网络并没有发在什么顶级期刊,但是思路还是有点意思的。它是一个混合结合。他将所有的基本都组合在一起了。大家看名字就可以看出来。

C++23 已移除特性解析

文章目录 引言C23 已移除特性介绍1. 垃圾收集的支持和基于可达性的泄漏检测(P2186R2)背景与原理存在的问题移除的影响 2. 混合宽字符串字面量拼接非良构(P2201R1)宽字符串编码概述混合拼接的问题示例分析移除的意义 3. 不可编码宽…

CTFHub-RCE 命令注入-过滤cat

观察源代码 代码里面可以发现过滤了cat 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 我们尝试将cat转义打开这个文件 127.0.0.1|c\a\t flag_6562854712907.php 可是发现 文本内容显示不出来,所以怀…

Dota2参议院与递增的三元子序列:算法揭示策略与模式的双重世界

博客引言: 在我们的生活中,策略与模式无处不在,它们既是解决问题的关键,也是揭示隐藏规律的钥匙。今天,我们将通过两个有趣的问题,探索算法如何在策略博弈与模式识别中发挥作用。 首先,我们将…

ShenNiusModularity项目源码学习(31:ShenNius.Admin.Mvc项目分析-16)

关键词管理页面用于新建、维护、删除、导入/导出系统CMS管理模块的关键词,关键词信息用于匹配CMS管理模块新建的文章内容中相同的信息,使其点击文章中的关键词时可以跳转到关键词关联的链接。关键词管理页面的后台控制器类KeywordController位于ShenNius…

ESP32-idf学习(三)esp32C3连接iot

一、前言 上一篇用蓝牙作为通信方式,虽然勉强完成了控制,但结果显然不是那么符合我们的预期,既然用蓝牙还需要研究一段时间,那我们就先整一些现成的,不需要研究的!iot云平台!这里当然也是通过w…

五芳斋陷多重困局 业绩下滑与库存压力增大

端午节期间,五芳斋面临了多重挑战。2024年公司营收和净利润双双下滑,分别下降超过14%,依然高度依赖粽子销售。市场方面,公司遭遇代工企业“蜜枣粽异物”风波,品牌形象受损。此外,公司给股东送粽子礼盒的举动被网友解读为清理库存,股价也连续下跌,5月30日更是收跌超7%。…

儿童节愿我们永葆童真 留住那份纯真好奇

今天是六一儿童节,每个孩子都会慢慢长大,而每个大人也都曾是孩子。在岁月的流逝中,那颗童心始终未变。愿我们永远保持童真和对这个世界的爱与好奇,快乐、灿烂、温暖、纯粹,一直可爱。责任编辑:zhangxiaohua

python里面导入yfinance的时候报错

我的代码: import yfinance as yf import os proxy http://127.0.0.1:7890 # 代理设置,此处修改 os.environ[HTTP_PROXY] proxy os.environ[HTTPS_PROXY] proxydata yf.download("AAPL",start"2010-1-1",end"2021-8-1&quo…

window桌面任务栏不见了鼠标移动底部无响应命令重启资源管理器无效解决办法

首先虽然重启是万能的,但是我不想重启啊大哥 以前喜欢用taskkill /f /im explorer 然后start explorerwindow11竟然没效果 ,所以ctrlaltdel 任务管理器 直接找到资源管理器右击重启,发现好了 {C44C69DC-D2BB-4E68-9F11-0AC2E2B5300B}.png 另外 ctrlwinsh…