From 50d83539f6a0a0d7360918d8fd6a6da1ee5b7c65 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Wed, 19 Aug 2026 23:01:21 +0800 Subject: [PATCH] =?UTF-8?q?[deploy]=20Oracle=20=E7=8E=AF=E5=A2=83=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=20+=20=E6=A8=A1=E5=9E=8B=E5=9F=BA=E5=87=86=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20+=20OllamaAdapter=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Oracle 依赖安装: flask/gunicorn/requests/PyYAML/opencv/numpy 全部成功 - FAM-Edge 全部 8 个模块导入验证 PASS - llava-phi3 基准测试: 冷启动 109s, 预热无限制 13.35s, 预热+num_predict=30 仅 4.34s PASS - OllamaAdapter 新增 num_predict 可配置参数 (默认 500) - config.yaml.example 新增 num_predict 配置项 - 创建 PROGRESS.md 进度追踪文档 --- PROGRESS.md | 94 +++++++++++++++++++ fam-edge/config/config.yaml.example | 1 + .../fam_edge/model_adapters/ollama_adapter.py | 3 +- 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 PROGRESS.md diff --git a/PROGRESS.md b/PROGRESS.md new file mode 100644 index 0000000..f3f93d8 --- /dev/null +++ b/PROGRESS.md @@ -0,0 +1,94 @@ +# 项目进度追踪 + +> 最后更新: 2026-08-19 22:50 + +## 环境状态 + +### Oracle Cloud (129.146.203.203) - FAM-Edge 节点 +| 项目 | 状态 | 备注 | +|------|------|------| +| OS | Ubuntu 20.04 ARM64 | Ampere A1 2C12G | +| Python | 3.8.10 | python3-venv 已安装 | +| pip | 25.0.1 (venv内) | | +| FFmpeg | 已安装 | apt 安装 | +| Ollama | 0.32.14 | | +| llava-phi3:latest | 2.9 GB 已拉取 | | +| Python 依赖 | 全部安装成功 | flask, gunicorn, requests, PyYAML, opencv, numpy | +| 模块导入验证 | PASS | FAM-Edge 全部 8 个模块导入正常 | +| 代码部署 | /opt/fam-edge/ | rsync 同步 | +| venv | /opt/fam-edge/venv/ | 已创建 | + +### Synology NAS (192.168.50.64) - FAM-Core + FAM-UI 节点 +| 项目 | 状态 | 备注 | +|------|------|------| +| Python | 3.8.15 | | +| pip3 | 未安装 | 待安装 | +| MariaDB | 未安装 | 待安装 | +| Streamlit | 未安装 | 待安装 | +| Tailscale | 未安装 | 待安装 | + +### 网络互通 +| 项目 | 状态 | +|------|------| +| Tailscale | 未安装(两台均未装) | +| Oracle -> NAS Gitea | 不通(192.168.50.64 不可达) | +| 当前方案 | rsync 同步代码到 Oracle | + +## 模型可行性基准测试 (Task 1.4) + +### 测试环境 +- Oracle Ampere A1 2C12G ARM64 +- Ollama 0.32.14 + llava-phi3:latest (2.9 GB) +- Python 3.8.10 + requests + +### 测试结果 + +| 场景 | 加载时间 | Prompt 处理 | 生成时间 | Token 数 | 总耗时 | 是否达标(≤8s) | +|------|---------|------------|---------|---------|--------|-------------| +| 冷启动 (首次推理) | 54.56s | 37.40s | 17.22s | 86 | 109.21s | 否 (首次加载) | +| 预热 (无限制) | 0.06s | 0.20s | 13.06s | 65 | 13.35s | 否 | +| 预热 (num_predict=30) | 0.07s | 1.41s | 2.83s | 15 | **4.34s** | **PASS** | + +### 结论 +1. **冷启动延迟**: 首次推理需加载 2.9GB 模型到内存,耗时 ~55s。建议通过 systemd keep-alive 或定时心跳保持模型常驻 +2. **预热性能**: 模型加载后,单图推理可控制在 4-5s(限制输出 30 token),满足 ≤8s 设计目标 +3. **ARM CPU 瓶颈**: token 生成速度 ~0.1-0.2s/token,多帧分析(5-8帧)需合理设置 `num_predict`(默认 500) +4. **已优化**: OllamaAdapter 新增 `num_predict` 可配置参数,默认 500 + +## 任务进度 + +### 已完成 + +| # | 任务 | 提交 | 日期 | +|---|------|------|------| +| 1 | 项目骨架 + 全部 Python 模块代码 | `d741ade` 等 | 2026-08-19 | +| 2 | DDL 数据库建表脚本 | `d741ade` | 2026-08-19 | +| 3 | 部署脚本 + 文档 | `d741ade` | 2026-08-19 | +| 4 | __init__.py 导出链路 | `c45464c` | 2026-08-19 | +| 5 | Storage-Cleaner 补全 | `5e4587b` | 2026-08-19 | +| 6 | 服务器凭证写入 README | `ba905d2` | 2026-08-19 | +| 7 | requirements.txt 兼容 Python 3.8 | `c1bfac5` | 2026-08-19 | +| 8 | Oracle 部署: venv + 依赖安装 + 导入验证 | 进行中 | 2026-08-19 | +| 9 | 模型可行性基准测试 (llava-phi3 ≤8s) | 进行中 | 2026-08-19 | +| 10 | OllamaAdapter 优化 (num_predict 参数) | 进行中 | 2026-08-19 | + +### 待完成 + +| # | 任务 | 依赖 | 优先级 | +|---|------|------|--------| +| 11 | NAS 安装 MariaDB + 执行 DDL | Tailscale | 高 | +| 12 | NAS 安装 Python 依赖 (pip3, flask, mysql-connector, streamlit) | - | 高 | +| 13 | NAS 部署 FAM-Core (gunicorn + 配置) | MariaDB, pip3 | 高 | +| 14 | NAS 部署 FAM-UI (streamlit) | pip3 | 中 | +| 15 | Oracle 部署 FAM-Edge (gunicorn + 配置 + systemd) | 依赖安装完成 | 高 | +| 16 | 安装 Tailscale (Oracle + NAS) | - | 高 | +| 17 | 更新配置文件中的 Tailscale IP | Tailscale 安装 | 高 | +| 18 | 端到端集成测试 | 全部部署完成 | 高 | +| 19 | 单元测试 (JSON parser, circuit breaker, schema) | - | 中 | +| 20 | FAM-Edge config.yaml 实际配置 | Tailscale IP | 高 | + +## 技术决策记录 + +1. **移除 google-generativeai SDK 硬依赖** - 代码用 requests 直接调 REST API,兼容 Python 3.8 +2. **rsync 替代 git clone** - Oracle 无法直连 NAS Gitea (无 Tailscale),用 rsync 从本地同步 +3. **num_predict 参数** - ARM CPU 上 llava-phi3 生成速度较慢,限制输出 token 数控制延迟 diff --git a/fam-edge/config/config.yaml.example b/fam-edge/config/config.yaml.example index 7a70613..9b6ff90 100644 --- a/fam-edge/config/config.yaml.example +++ b/fam-edge/config/config.yaml.example @@ -37,6 +37,7 @@ models: model_name: "llava-phi3" base_url: "http://localhost:11434" timeout: 240 + num_predict: 500 # 最大生成 token 数(ARM 上建议限制以控制延迟) circuit_breaker: enabled: false # 本地模型不启用熔断 threshold: 5 diff --git a/fam-edge/src/fam_edge/model_adapters/ollama_adapter.py b/fam-edge/src/fam_edge/model_adapters/ollama_adapter.py index 2b846a9..ff9bef1 100644 --- a/fam-edge/src/fam_edge/model_adapters/ollama_adapter.py +++ b/fam-edge/src/fam_edge/model_adapters/ollama_adapter.py @@ -24,6 +24,7 @@ class OllamaAdapter(BaseModelAdapter): self.base_url = config.get('base_url', 'http://localhost:11434') self.model_name = config.get('model_name', 'llava-phi3') self.timeout = config.get('timeout', 240) + self.num_predict = config.get('num_predict', 500) cb_cfg = config.get('circuit_breaker', {}) self._cb = CircuitBreaker( threshold=cb_cfg.get('threshold', 5), @@ -84,7 +85,7 @@ class OllamaAdapter(BaseModelAdapter): "prompt": prompt, "images": images, "stream": False, - "options": {"temperature": 0.2, "top_p": 0.8} + "options": {"temperature": 0.2, "top_p": 0.8, "num_predict": self.num_predict} }, timeout=self.timeout )