微信扫码
添加专属顾问
我要投稿
高效监控本地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文件。 将该文件拷贝到目标机器上运行即可。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-19
低延迟小智AI服务端搭建-ASR篇(续):CPU可跑
2025-04-19
LoRA 与QLoRA区别
2025-04-18
DeepSeek-V3-0324 本地部署,vLLM和SGLang的方法
2025-04-18
Ollama对决vLLM:DEEPSEEK部署神器选谁?90%人选错!这份实测攻略让你秒懂!
2025-04-18
ollama v0.6.6 震撼发布!推理能力翻倍、下载提速 50%,对比 vLLM/LMDeploy 谁更强
2025-04-17
从零开始开发 MCP Server
2025-04-17
AI 应用开发不要在大模型迭代必经之路上
2025-04-17
阿里百炼出手了!MCP 现在配置门槛下降了 100 倍
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
2025-04-01
2025-03-31
2025-03-20
2025-03-16
2025-03-16
2025-03-13
2025-03-13
2025-03-11