EmbeddingGemma-300m部署指南:Ollama镜像+Prometheus监控+日志追踪一体化
EmbeddingGemma-300m部署指南Ollama镜像Prometheus监控日志追踪一体化想快速搭建一个功能强大、易于管理的文本向量化服务吗EmbeddingGemma-300m作为谷歌推出的轻量级嵌入模型凭借其3亿参数和出色的性能是构建本地语义搜索、智能问答和文档分类应用的理想选择。但部署只是第一步如何确保服务稳定运行、性能可观测才是工程实践中的关键。本文将带你从零开始在Ollama平台上部署EmbeddingGemma-300m模型并集成Prometheus监控与日志追踪打造一个集服务、监控、观测于一体的生产级解决方案。无论你是AI应用开发者还是运维工程师都能通过这篇指南快速获得一个开箱即用、状态透明的嵌入服务环境。1. 环境准备与Ollama部署在开始之前我们先明确一下本教程的目标和前置条件。你将学会如何部署一个带有完整可观测性能力的EmbeddingGemma-300m服务。1.1 前置条件与工具准备为了顺利完成部署你需要准备以下环境一台Linux服务器推荐使用Ubuntu 20.04或更高版本至少4GB内存模型运行需要约2GB。Docker环境确保已安装Docker和Docker Compose这是运行Ollama和监控组件的基础。基本的命令行操作能力能够使用ssh连接服务器执行简单的Linux命令。如果你还没有安装Docker可以通过以下命令快速安装# 更新软件包索引 sudo apt-get update # 安装必要的依赖 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker仓库 sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable # 安装Docker sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker --version docker-compose --version1.2 部署EmbeddingGemma-300m服务Ollama提供了简单的方式来管理和运行大语言模型。我们将使用一个预配置的Docker镜像来快速启动EmbeddingGemma-300m服务。首先创建一个项目目录并编写Docker Compose配置文件# 创建项目目录 mkdir embedding-service cd embedding-service # 创建docker-compose.yml文件 cat docker-compose.yml EOF version: 3.8 services: ollama: image: ollama/ollama:latest container_name: embeddinggemma-service restart: unless-stopped ports: - 11434:11434 volumes: - ./ollama_data:/root/.ollama environment: - OLLAMA_KEEP_ALIVE24h - OLLAMA_HOST0.0.0.0 command: serve EOF这个配置文件做了几件事使用最新的Ollama官方镜像将容器的11434端口映射到主机的11434端口这是Ollama的API端口挂载一个本地目录来持久化模型数据设置环境变量让服务保持运行并监听所有网络接口现在启动服务# 启动Ollama服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看服务日志 docker-compose logs -f ollama服务启动后我们需要拉取并运行EmbeddingGemma-300m模型# 进入Ollama容器 docker exec -it embeddinggemma-service /bin/bash # 在容器内拉取EmbeddingGemma-300m模型 ollama pull embeddinggemma:300m # 运行模型 ollama run embeddinggemma:300m # 测试模型是否正常工作在交互式命令行中 请将人工智能转换为向量表示如果你看到模型能够响应并生成向量说明基础服务已经部署成功。按CtrlD退出交互模式。2. 配置Prometheus监控系统监控是生产环境不可或缺的一环。Prometheus是一个开源的监控和告警工具特别适合监控时间序列数据。我们将为EmbeddingGemma服务添加监控能力。2.1 部署Prometheus和Grafana首先扩展我们的Docker Compose配置添加监控组件# 创建prometheus配置文件目录 mkdir -p prometheus # 创建prometheus.yml配置文件 cat prometheus/prometheus.yml EOF global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: prometheus static_configs: - targets: [localhost:9090] - job_name: ollama static_configs: - targets: [ollama:11434] metrics_path: /api/metrics EOF # 更新docker-compose.yml cat docker-compose.yml EOF prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped ports: - 9090:9090 volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus_data:/prometheus command: - --config.file/etc/prometheus/prometheus.yml - --storage.tsdb.path/prometheus - --web.console.libraries/etc/prometheus/console_libraries - --web.console.templates/etc/prometheus/consoles - --storage.tsdb.retention.time200h - --web.enable-lifecycle grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - 3000:3000 volumes: - ./grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 EOF2.2 配置Ollama暴露监控指标为了让Prometheus能够收集Ollama的监控数据我们需要配置Ollama暴露指标。创建一个Ollama的配置文件# 创建Ollama配置目录 mkdir -p ollama_config # 创建Modelfile配置 cat ollama_config/Modelfile EOF FROM embeddinggemma:300m # 启用Prometheus指标 PARAMETER metrics true # 设置服务参数 PARAMETER num_ctx 2048 PARAMETER num_batch 512 EOF然后更新Ollama服务配置使用这个Modelfile# 更新docker-compose.yml中的ollama服务部分 # 首先停止服务 docker-compose down # 更新docker-compose.yml替换ollama服务配置 # 使用sed命令或手动编辑文件更新后的ollama服务配置应该类似这样ollama: image: ollama/ollama:latest container_name: embeddinggemma-service restart: unless-stopped ports: - 11434:11434 volumes: - ./ollama_data:/root/.ollama - ./ollama_config:/config environment: - OLLAMA_KEEP_ALIVE24h - OLLAMA_HOST0.0.0.0 command: sh -c ollama pull embeddinggemma:300m ollama create embeddinggemma-monitored -f /config/Modelfile ollama run embeddinggemma-monitored 2.3 启动监控系统并验证现在启动所有服务# 启动所有服务 docker-compose up -d # 等待服务启动 sleep 30 # 检查所有服务状态 docker-compose ps # 测试Prometheus是否能够抓取指标 curl http://localhost:9090/api/v1/targets # 测试Ollama指标端点 curl http://localhost:11434/api/metrics如果一切正常你应该能看到Ollama暴露的监控指标包括ollama_model_load_duration_seconds模型加载时间ollama_inference_duration_seconds推理耗时ollama_requests_total总请求数ollama_tokens_processed_total处理的token总数3. 实现日志追踪与可观测性有了监控指标我们还需要完整的日志追踪能力。这将帮助我们诊断问题、分析性能瓶颈。3.1 配置结构化日志首先我们配置Ollama输出结构化的JSON日志便于后续处理和分析# 创建日志配置文件 cat ollama_config/log_config.json EOF { level: info, output: stdout, format: json, timestamp: true, caller: true } EOF更新Ollama的Modelfile添加日志配置# 更新Modelfile cat ollama_config/Modelfile EOF # 日志配置 SYSTEM 你是一个文本嵌入模型专门用于生成高质量的文本向量表示。 请以JSON格式输出日志包含以下字段 - timestamp: 时间戳 - level: 日志级别 - message: 日志消息 - operation: 操作类型embedding/generation - duration_ms: 耗时毫秒 - input_length: 输入文本长度 - model: 模型名称 3.2 部署Loki日志收集系统Loki是Grafana Labs开发的日志聚合系统与Prometheus和Grafana完美集成。我们来部署它# 创建loki配置文件 mkdir -p loki cat loki/loki-config.yaml EOF auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9096 common: path_prefix: /loki storage: filesystem: chunks_directory: /loki/chunks rules_directory: /loki/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h ruler: alertmanager_url: http://localhost:9093 # 禁用权限验证简化配置 limits_config: allow_structured_metadata: true reject_old_samples: true reject_old_samples_max_age: 168h EOF # 创建promtail配置文件日志收集代理 cat loki/promtail-config.yaml EOF server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: http://loki:3100/loki/api/v1/push scrape_configs: - job_name: ollama static_configs: - targets: - localhost labels: job: ollama __path__: /var/log/ollama/*.log pipeline_stages: - json: expressions: timestamp: timestamp level: level message: message operation: operation duration_ms: duration_ms input_length: input_length model: model - labels: level: operation: model: - timestamp: source: timestamp format: RFC3339 EOF更新docker-compose.yml添加Loki和Promtailcat docker-compose.yml EOF loki: image: grafana/loki:latest container_name: loki restart: unless-stopped ports: - 3100:3100 command: -config.file/etc/loki/local-config.yaml volumes: - ./loki/loki-config.yaml:/etc/loki/local-config.yaml - ./loki_data:/loki promtail: image: grafana/promtail:latest container_name: promtail restart: unless-stopped volumes: - ./loki/promtail-config.yaml:/etc/promtail/config.yaml - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock command: -config.file/etc/promtail/config.yaml EOF3.3 配置Grafana数据源和仪表盘最后我们需要配置Grafana来展示监控指标和日志。创建一个初始化脚本# 创建Grafana配置脚本 cat grafana/init-dashboard.sh EOF #!/bin/bash # 等待Grafana启动 sleep 30 # 添加Prometheus数据源 curl -X POST http://admin:admin123localhost:3000/api/datasources \ -H Content-Type: application/json \ -d { name: Prometheus, type: prometheus, url: http://prometheus:9090, access: proxy, isDefault: true } # 添加Loki数据源 curl -X POST http://admin:admin123localhost:3000/api/datasources \ -H Content-Type: application/json \ -d { name: Loki, type: loki, url: http://loki:3100, access: proxy } # 导入Ollama监控仪表盘 curl -X POST http://admin:admin123localhost:3000/api/dashboards/db \ -H Content-Type: application/json \ -d { dashboard: { title: Ollama Embedding Service Monitoring, panels: [ { title: 请求速率, type: graph, targets: [ { expr: rate(ollama_requests_total[5m]), legendFormat: {{job}} } ], gridPos: {h: 8, w: 12, x: 0, y: 0} }, { title: 推理延迟, type: graph, targets: [ { expr: histogram_quantile(0.95, rate(ollama_inference_duration_seconds_bucket[5m])), legendFormat: P95延迟 } ], gridPos: {h: 8, w: 12, x: 12, y: 0} } ], time: { from: now-6h, to: now } }, overwrite: true } EOF chmod x grafana/init-dashboard.sh更新docker-compose.yml中的grafana服务添加初始化脚本grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - 3000:3000 volumes: - ./grafana_data:/var/lib/grafana - ./grafana/init-dashboard.sh:/init-dashboard.sh environment: - GF_SECURITY_ADMIN_PASSWORDadmin123 entrypoint: [/bin/sh, -c, /run.sh /init-dashboard.sh wait]4. 测试一体化部署效果现在所有组件都已配置完成让我们测试整个系统的运行情况。4.1 启动所有服务并验证# 启动所有服务 docker-compose down docker-compose up -d # 等待服务完全启动约1分钟 sleep 60 # 检查所有容器状态 docker-compose ps # 测试EmbeddingGemma服务 curl http://localhost:11434/api/generate -d { model: embeddinggemma-monitored, prompt: 将文本转换为向量表示, stream: false } # 测试Prometheus指标 curl http://localhost:9090/api/v1/query?queryollama_requests_total # 测试Loki日志查询 curl -G http://localhost:3100/loki/api/v1/query_range \ --data-urlencode query{jobollama} \ --data-urlencode limit54.2 访问Web界面现在你可以通过浏览器访问各个服务的Web界面Ollama WebUI访问http://你的服务器IP:11434在界面中输入文本测试嵌入功能查看模型运行状态Prometheus访问http://你的服务器IP:9090在Graph页面输入ollama_requests_total查看请求指标查看Targets页面确认所有监控目标状态为UPGrafana访问http://你的服务器IP:3000用户名admin密码admin123在Explore页面可以查询Prometheus指标和Loki日志查看预配置的监控仪表盘4.3 创建测试脚本验证完整流程让我们创建一个完整的测试脚本验证从文本嵌入到监控日志的整个流程# test_embedding_service.py import requests import json import time class EmbeddingServiceTester: def __init__(self, base_urlhttp://localhost:11434): self.base_url base_url def test_embedding(self, text): 测试文本嵌入功能 print(f测试文本: {text[:50]}...) start_time time.time() try: response requests.post( f{self.base_url}/api/embeddings, json{ model: embeddinggemma-monitored, prompt: text }, timeout30 ) elapsed_time (time.time() - start_time) * 1000 if response.status_code 200: result response.json() embedding result.get(embedding, []) print(f✓ 嵌入成功) print(f 向量维度: {len(embedding)}) print(f 耗时: {elapsed_time:.2f}ms) print(f 前5个值: {embedding[:5]}) # 记录结构化日志 self._log_operation(embedding, text, elapsed_time, True) return embedding else: print(f✗ 嵌入失败: {response.status_code}) print(f 响应: {response.text}) self._log_operation(embedding, text, elapsed_time, False) return None except Exception as e: print(f✗ 请求异常: {str(e)}) self._log_operation(embedding, text, elapsed_time, False) return None def test_similarity(self, text1, text2): 测试文本相似度计算 print(f\n测试相似度计算:) print(f 文本1: {text1[:30]}...) print(f 文本2: {text2[:30]}...) emb1 self.test_embedding(text1) emb2 self.test_embedding(text2) if emb1 and emb2: # 计算余弦相似度 import numpy as np vec1 np.array(emb1) vec2 np.array(emb2) similarity np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) print(f✓ 相似度: {similarity:.4f}) return similarity return None def _log_operation(self, operation, text, duration_ms, success): 模拟结构化日志输出 log_entry { timestamp: time.strftime(%Y-%m-%dT%H:%M:%SZ, time.gmtime()), level: info if success else error, message: f{operation}操作{成功 if success else 失败}, operation: operation, duration_ms: round(duration_ms), input_length: len(text), model: embeddinggemma-300m, success: success } # 在实际应用中这里会将日志发送到Loki # 现在我们先打印出来 print(f 日志: {json.dumps(log_entry, ensure_asciiFalse)}) def check_metrics(self): 检查监控指标 print(\n检查监控指标...) try: # 检查Prometheus指标 prom_response requests.get(http://localhost:9090/api/v1/query?queryollama_requests_total) if prom_response.status_code 200: data prom_response.json() print(✓ Prometheus指标可访问) if data[data][result]: print(f 总请求数: {data[data][result][0][value][1]}) # 检查Loki日志 loki_response requests.get( http://localhost:3100/loki/api/v1/query?query{jobollama}limit1 ) if loki_response.status_code 200: print(✓ Loki日志可访问) except Exception as e: print(f✗ 监控检查失败: {str(e)}) if __name__ __main__: tester EmbeddingServiceTester() # 测试不同场景 test_cases [ 人工智能是未来科技发展的重要方向, 机器学习让计算机能够从数据中学习, 深度学习是机器学习的一个分支, 今天的天气真好适合出去散步, 我喜欢吃苹果和香蕉 ] print( * 50) print(开始测试EmbeddingGemma服务) print( * 50) # 测试单个文本嵌入 for i, text in enumerate(test_cases[:3], 1): print(f\n测试用例 {i}:) tester.test_embedding(text) # 测试相似度 print(\n * 50) print(测试文本相似度) print( * 50) tester.test_similarity(test_cases[0], test_cases[1]) # 相关主题 tester.test_similarity(test_cases[0], test_cases[4]) # 不相关主题 # 检查监控系统 print(\n * 50) print(检查监控系统) print( * 50) tester.check_metrics() print(\n * 50) print(测试完成) print(请访问以下地址查看完整监控:) print( - Grafana仪表盘: http://localhost:3000) print( - Prometheus: http://localhost:9090) print( - Ollama WebUI: http://localhost:11434) print( * 50)运行测试脚本# 安装依赖 pip install requests numpy # 运行测试 python test_embedding_service.py5. 总结通过本指南我们成功部署了一个完整的EmbeddingGemma-300m服务并集成了Prometheus监控和Loki日志追踪系统。这个一体化解决方案具有以下优势5.1 部署成果回顾核心服务部署使用Ollama快速部署了EmbeddingGemma-300m嵌入模型提供了稳定的文本向量化服务。监控系统集成通过Prometheus实时收集服务指标包括请求量、响应时间、资源使用率等关键数据。日志追踪能力借助Loki实现了结构化日志的收集和查询便于问题诊断和性能分析。可视化仪表盘利用Grafana提供了统一的监控视图可以直观地查看服务状态和性能趋势。5.2 实际应用建议在实际使用中你可以根据具体需求进行调整性能调优如果处理大量文本可以调整Ollama的num_ctx和num_batch参数监控告警在Grafana中配置告警规则当服务异常时及时通知日志分析利用Loki的日志查询功能分析用户使用模式和常见问题扩展部署如果需要更高可用性可以考虑部署多个Ollama实例并配置负载均衡5.3 后续优化方向这个基础部署还可以进一步优化添加身份验证为API服务添加API密钥验证确保服务安全实现缓存层对频繁请求的文本嵌入结果进行缓存提升响应速度配置自动扩缩容基于监控指标自动调整服务实例数量集成向量数据库将生成的向量存储到专门的向量数据库如Milvus、Qdrant中实现高效的相似度搜索5.4 快速验证你的部署部署完成后你可以通过以下命令快速验证各项功能# 1. 检查服务状态 docker-compose ps # 2. 测试嵌入API curl -X POST http://localhost:11434/api/embeddings \ -H Content-Type: application/json \ -d {model: embeddinggemma-monitored, prompt: 测试文本嵌入} # 3. 查看监控指标 curl http://localhost:9090/api/v1/query?queryollama_requests_total # 4. 查询最近日志 curl -G http://localhost:3100/loki/api/v1/query_range \ --data-urlencode query{jobollama} \ --data-urlencode limit10 # 5. 访问Web界面 echo Grafana: http://$(curl -s ifconfig.me):3000 echo Prometheus: http://$(curl -s ifconfig.me):9090 echo Ollama: http://$(curl -s ifconfig.me):11434现在你已经拥有了一个功能完整的EmbeddingGemma-300m服务它不仅能够提供高质量的文本向量化能力还具备了生产环境所需的可观测性。你可以基于这个基础架构快速构建语义搜索、文档分类、智能推荐等各种AI应用。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2473321.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!