微信扫码
添加专属顾问
我要投稿
高效监控本地DeepSeek-R1服务,确保业务系统稳定运行。核心内容:1. 客户私有化部署DeepSeek-R1的需求背景2. Ollama服务监控程序的设计原理与实现3. Python代码实现细节及日志配置
最近deepseek-r1大火,有个业务系统,需要在本地接入deepseek-r1,这位客户私有化部署的需求,同时闲置了一张3090卡。给他用Ollma拉取deepseek-r1:32b的模型。一开始都很顺利,谁知道,服务运行一段时间,就莫名奇妙卡死了,试了很多种方法,仍然没找到原因,所以就写了如下的监测程序监控服务,原理很简单,就是定时调用Ollama服务api,如果请求超时,则重启Ollama服务。
这边使用Python实现的,创建一个ollama_monitor.py
文件。
import requests
import time
import subprocess
import psutil
import logging
import os
from datetime import datetime
OLLAMA_HOST = os.environ.get("OLLAMA_HOST", "localhost:11434")
try:
port = OLLAMA_HOST.split(":")[1] # 提取端口号
OLLAMA_API_URL = f"http://localhost:{port}/api/tags"
except IndexError:
logging.error("OLLAMA_HOST 环境变量格式错误,应为 '主机:端口'")
port = "11434"#默认端口
OLLAMA_API_URL = f"http://localhost:{port}/api/tags"
TIMEOUT_SECONDS = 10
RESTART_COMMAND = "ollama ps"
defsetup_logging():
"""配置日志记录器,同时输出到文件和控制台。"""
log_dir = "logs"
ifnot os.path.exists(log_dir):
os.makedirs(log_dir)
current_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
log_file_path = os.path.join(log_dir, f"ollama_monitor_{current_time}.log")
# 创建文件处理器
file_handler = logging.FileHandler(log_file_path)
file_handler.setLevel(logging.INFO)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(console_formatter)
# 获取根日志记录器并添加处理器
logging.basicConfig(level=logging.INFO, handlers=[file_handler, console_handler])
defcheck_ollama_status():
"""检查 Ollama 状态,如果卡住则返回 True,否则返回 False。"""
try:
response = requests.get(OLLAMA_API_URL, timeout=TIMEOUT_SECONDS)
response.raise_for_status()
returnFalse
except requests.exceptions.RequestException as e:
logging.error(f"Ollama 可能卡住:{e}")
returnTrue
defrestart_ollama():
"""重启 Ollama 服务。"""
logging.info("重启 Ollama 服务...")
try:
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == 'ollama.exe':
p = psutil.Process(proc.info['pid'])
p.terminate()
subprocess.Popen(RESTART_COMMAND, shell=True)
logging.info("Ollama 服务已重启。")
except Exception as e:
logging.error(f"重启 Ollama 服务失败:{e}")
if __name__ == "__main__":
setup_logging()
whileTrue:
if check_ollama_status():
restart_ollama()
sleep_time = int(os.environ.get("OLLAMA_MONITOR_INTERVAL", 60))
time.sleep(sleep_time)
这边检测的是http://localhost:{port}/api/tags
获取模型列表接口,用使用ps接口,没效果。 这边读取了环境变量 OLLAMA_MONITOR_INTERVAL
监控间隔,默认为60秒
requirements.txt
requests
psutil
pyinstaller
运行 pip install -r requirements.txt
在程序目录下执行:pyinstaller --onefile ollama_monitor.py
之后在根目录的dist/ollama_monitor.exe文件。 将该文件拷贝到目标机器上运行即可。
源码位置: https://github.com/Kimizhao/ollama-monitor.git
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-11
DeepSeek-R1 671B + KTransformer部署服务器配置&万元复现方案
2025-03-11
「古董」GPU也能跑DeepSeek同款GRPO!显存只需1/10,上下文爆涨10倍
2025-03-11
Cursor 0.47 自定义 Agent 来了
2025-03-10
基于 Apple Silicon 架构的Mac部署DeepSeek-R1-671B 模型本地化指南
2025-03-10
RoostGPT:改变了自动化软件测试的游戏规则
2025-03-09
8分钟打造一个DeepSeek API智能测试引擎:当咖啡还没凉,测试报告已出炉
2025-03-09
lceberg 助力 B 站商业化模型样本行级更新的实践
2025-03-09
单卡4090微调DeepSeek-R1-32B
2025-02-04
2025-02-04
2024-09-18
2024-07-11
2024-07-09
2024-07-11
2024-07-26
2025-02-05
2025-01-27
2025-02-01