千问3.5-2B部署教程:GPU显存监控脚本(nvidia-smi + prometheus exporter)
1. 为什么需要GPU显存监控
在部署千问3.5-2B这类视觉语言模型时,GPU显存管理至关重要。模型运行时显存占用会直接影响:
- 能否同时处理多个请求
- 系统稳定性
- 性能表现
- 资源利用率
通过实时监控显存使用情况,我们可以:
- 及时发现内存泄漏
- 优化批处理大小
- 合理调度任务
- 预防服务崩溃
2. 监控方案设计
我们将使用nvidia-smi结合prometheus exporter搭建监控系统,这套方案的优势在于:
- 轻量级:不占用额外GPU资源
- 实时性:秒级数据采集
- 可视化:可与Grafana集成
- 可扩展:支持多卡监控
2.1 系统架构
nvidia-smi → prometheus exporter → prometheus server → grafana3. 环境准备
3.1 基础软件安装
确保系统已安装:
- Python 3.6+
- pip
- nvidia-driver
- nvidia-smi
检查nvidia-smi是否可用:
nvidia-smi3.2 安装prometheus客户端库
pip install prometheus-client4. 监控脚本实现
4.1 创建exporter脚本
新建文件gpu_monitor.py:
import subprocess from prometheus_client import start_http_server, Gauge import time # 创建Prometheus指标 GPU_MEM_USAGE = Gauge('gpu_memory_usage', 'GPU memory usage in MB', ['gpu_id']) GPU_UTIL = Gauge('gpu_utilization', 'GPU utilization percentage', ['gpu_id']) def get_gpu_stats(): try: # 获取nvidia-smi输出 result = subprocess.run( ['nvidia-smi', '--query-gpu=memory.used,utilization.gpu', '--format=csv,noheader,nounits'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) if result.returncode != 0: print(f"Error running nvidia-smi: {result.stderr}") return None return result.stdout.strip().split('\n') except Exception as e: print(f"Exception in get_gpu_stats: {e}") return None def update_metrics(): while True: gpu_stats = get_gpu_stats() if gpu_stats: for gpu_id, stats in enumerate(gpu_stats): mem_used, util = stats.split(',') GPU_MEM_USED.labels(gpu_id=str(gpu_id)).set(float(mem_used.strip())) GPU_UTIL.labels(gpu_id=str(gpu_id)).set(float(util.strip())) time.sleep(5) if __name__ == '__main__': # 启动HTTP服务器在9101端口 start_http_server(9101) update_metrics()4.2 脚本功能说明
这个脚本实现了:
- 每5秒采集一次GPU数据
- 暴露两个关键指标:
gpu_memory_usage: 显存使用量(MB)gpu_utilization: GPU利用率(%)
- 支持多GPU监控
- 提供HTTP接口供prometheus抓取
5. 部署与运行
5.1 启动exporter
python gpu_monitor.py &5.2 验证数据采集
访问http://localhost:9101/metrics,应该能看到类似输出:
# HELP gpu_memory_usage GPU memory usage in MB # TYPE gpu_memory_usage gauge gpu_memory_usage{gpu_id="0"} 4532.0 # HELP gpu_utilization GPU utilization percentage # TYPE gpu_utilization gauge gpu_utilization{gpu_id="0"} 45.06. Prometheus配置
6.1 添加抓取目标
编辑prometheus配置文件prometheus.yml,添加:
scrape_configs: - job_name: 'gpu_exporter' static_configs: - targets: ['localhost:9101']6.2 重启prometheus
systemctl restart prometheus7. Grafana仪表板配置
7.1 导入仪表板
使用Grafana的ID10795导入官方GPU监控仪表板,或自定义创建:
- 添加
Time series面板 - 查询表达式:
gpu_memory_usage{gpu_id="0"} - 设置单位为
MB - 添加告警阈值线
7.2 推荐监控指标
- 显存使用率:
gpu_memory_usage / total_memory * 100 - GPU利用率:
gpu_utilization - 显存使用趋势
8. 结合千问3.5-2B的优化建议
8.1 显存使用分析
千问3.5-2B典型显存占用:
- 基础模型:~4.6GB
- 每请求额外:~0.5-1GB
8.2 优化策略
- 批处理控制:根据显存余量动态调整batch_size
- 请求队列:当显存>90%时暂停新请求
- 自动缩放:基于监控数据自动扩展实例
9. 常见问题解决
9.1 nvidia-smi无输出
可能原因:
- 驱动未正确安装
- 无权限访问GPU设备
解决方案:
# 检查驱动 nvidia-smi # 添加用户到video组 sudo usermod -aG video $USER9.2 数据采集延迟
调整采集间隔:
# 修改脚本中的sleep时间 time.sleep(2) # 更频繁采集9.3 Prometheus无法连接
检查:
- exporter是否运行
- 防火墙设置
- 端口是否冲突
10. 总结
通过本教程,我们实现了:
- 使用nvidia-smi采集GPU数据
- 通过prometheus exporter暴露指标
- 配置prometheus抓取和存储
- 在Grafana中可视化监控数据
这套监控方案可以帮助你:
- 实时掌握千问3.5-2B的显存使用情况
- 及时发现性能瓶颈
- 优化资源分配
- 提高服务稳定性
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。