234 lines
6.2 KiB
Markdown
234 lines
6.2 KiB
Markdown
# Nexa SDK
|
||
|
||
Nexa SDK 是一个功能全面的本地 AI 模型运行工具包。它支持多种模型类型的推理,包括 LLM、VLM(视觉语言模型)、TTS(文本转语音)、ASR(自动语音识别)等。该工具专注于性能优化,支持 CPU 和 GPU 加速。
|
||
|
||
## 特性
|
||
|
||
- **多模型支持**:运行 LLM、VLM、TTS、ASR、嵌入、重排序和图像生成模型
|
||
- **OpenAI 兼容 API**:提供标准的 OpenAI API 端点,便于集成
|
||
- **GPU 加速**:通过 NVIDIA CUDA 提供可选的 GPU 支持,实现更快的推理速度
|
||
- **资源管理**:可配置的 CPU/内存限制和 GPU 层卸载
|
||
- **模型缓存**:持久化模型存储,加快启动速度
|
||
- **配置文件支持**:轻松在 CPU 模式和 GPU 加速模式之间切换
|
||
|
||
## 快速开始
|
||
|
||
### 前置要求
|
||
|
||
- Docker 和 Docker Compose
|
||
- GPU 支持需要:NVIDIA Docker runtime 和兼容的 GPU
|
||
|
||
### 基本使用(CPU)
|
||
|
||
```bash
|
||
# 复制环境配置文件
|
||
cp .env.example .env
|
||
|
||
# 编辑 .env 配置模型和设置
|
||
# NEXA_MODEL=gemma-2-2b-instruct
|
||
|
||
# 使用 CPU 配置文件启动服务
|
||
docker compose --profile cpu up -d
|
||
```
|
||
|
||
### GPU 加速使用
|
||
|
||
```bash
|
||
# 复制环境配置文件
|
||
cp .env.example .env
|
||
|
||
# 配置 GPU 使用
|
||
# NEXA_MODEL=gemma-2-2b-instruct
|
||
# NEXA_GPU_LAYERS=-1 # -1 表示所有层都在 GPU 上
|
||
|
||
# 使用 GPU 配置文件启动服务
|
||
docker compose --profile gpu up -d
|
||
```
|
||
|
||
## 配置
|
||
|
||
### 环境变量
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
| ------------------------ | --------------------- | --------------------------------------------------- |
|
||
| `NEXA_SDK_VERSION` | `latest` | Nexa SDK Docker 镜像版本 |
|
||
| `NEXA_SDK_PORT_OVERRIDE` | `8080` | API 访问的主机端口 |
|
||
| `NEXA_MODEL` | `gemma-2-2b-instruct` | 要加载的模型(如 qwen3-4b、llama-3-8b、mistral-7b) |
|
||
| `NEXA_HOST` | `0.0.0.0:8080` | 服务器绑定地址 |
|
||
| `NEXA_KEEPALIVE` | `300` | 模型保活超时时间(秒) |
|
||
| `NEXA_ORIGINS` | `*` | CORS 允许的源 |
|
||
| `NEXA_HFTOKEN` | - | 用于私有模型的 HuggingFace 令牌 |
|
||
| `NEXA_LOG` | `none` | 日志级别(none、debug、info、warn、error) |
|
||
| `NEXA_GPU_LAYERS` | `-1` | 卸载到 GPU 的层数(-1 = 全部,0 = 仅 CPU) |
|
||
| `NEXA_SHM_SIZE` | `2g` | 共享内存大小 |
|
||
| `TZ` | `UTC` | 容器时区 |
|
||
|
||
### 资源限制
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
| ----------------------------- | ------ | --------------- |
|
||
| `NEXA_SDK_CPU_LIMIT` | `4.0` | 最大 CPU 核心数 |
|
||
| `NEXA_SDK_MEMORY_LIMIT` | `8G` | 最大内存 |
|
||
| `NEXA_SDK_CPU_RESERVATION` | `2.0` | 预留 CPU 核心数 |
|
||
| `NEXA_SDK_MEMORY_RESERVATION` | `4G` | 预留内存 |
|
||
|
||
### 配置文件
|
||
|
||
- `cpu`:使用 CPU 推理运行(需要指定默认配置文件)
|
||
- `gpu`:使用 GPU 加速运行(需要 NVIDIA GPU)
|
||
|
||
## 使用示例
|
||
|
||
### 测试 API
|
||
|
||
```bash
|
||
# 检查可用模型
|
||
curl http://localhost:8080/v1/models
|
||
|
||
# 聊天完成
|
||
curl http://localhost:8080/v1/chat/completions \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"model": "gemma-2-2b-instruct",
|
||
"messages": [
|
||
{"role": "user", "content": "你好!"}
|
||
]
|
||
}'
|
||
```
|
||
|
||
### 使用不同的模型
|
||
|
||
编辑 `.env` 更改模型:
|
||
|
||
```bash
|
||
# 资源受限时使用小模型
|
||
NEXA_MODEL=gemma-2-2b-instruct
|
||
# 或
|
||
NEXA_MODEL=qwen3-4b
|
||
|
||
# 追求更好质量时使用大模型
|
||
NEXA_MODEL=llama-3-8b
|
||
# 或
|
||
NEXA_MODEL=mistral-7b
|
||
```
|
||
|
||
### GPU 配置
|
||
|
||
对于 GPU 加速,调整层数:
|
||
|
||
```bash
|
||
# 将所有层卸载到 GPU(最快)
|
||
NEXA_GPU_LAYERS=-1
|
||
|
||
# 卸载 30 层(混合模式)
|
||
NEXA_GPU_LAYERS=30
|
||
|
||
# 仅 CPU
|
||
NEXA_GPU_LAYERS=0
|
||
```
|
||
|
||
## 模型管理
|
||
|
||
模型会在首次运行时自动下载,并缓存在 `nexa_models` 卷中。容器内的默认缓存位置是 `/root/.cache/nexa`。
|
||
|
||
要使用不同的模型:
|
||
|
||
1. 在 `.env` 中更新 `NEXA_MODEL`
|
||
2. 重启服务:`docker compose --profile <cpu|gpu> restart`
|
||
|
||
## API 端点
|
||
|
||
Nexa SDK 提供 OpenAI 兼容的 API 端点:
|
||
|
||
- `GET /v1/models` - 列出可用模型
|
||
- `POST /v1/chat/completions` - 聊天完成
|
||
- `POST /v1/completions` - 文本完成
|
||
- `POST /v1/embeddings` - 文本嵌入
|
||
- `GET /health` - 健康检查
|
||
- `GET /docs` - API 文档(Swagger UI)
|
||
|
||
## 故障排除
|
||
|
||
### 内存不足
|
||
|
||
增加内存限制或使用更小的模型:
|
||
|
||
```bash
|
||
NEXA_SDK_MEMORY_LIMIT=16G
|
||
NEXA_SDK_MEMORY_RESERVATION=8G
|
||
# 或切换到更小的模型
|
||
NEXA_MODEL=gemma-2-2b-instruct
|
||
```
|
||
|
||
### GPU 未检测到
|
||
|
||
确保已安装 NVIDIA Docker runtime:
|
||
|
||
```bash
|
||
# 检查 GPU 可用性
|
||
docker run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu22.04 nvidia-smi
|
||
```
|
||
|
||
### 模型下载问题
|
||
|
||
如果访问私有模型,设置 HuggingFace 令牌:
|
||
|
||
```bash
|
||
NEXA_HFTOKEN=your_hf_token_here
|
||
```
|
||
|
||
### 性能缓慢
|
||
|
||
- 使用 GPU 配置文件以获得更好的性能
|
||
- 增加 `NEXA_GPU_LAYERS` 以将更多计算卸载到 GPU
|
||
- 分配更多资源或使用更小的模型
|
||
|
||
## 高级配置
|
||
|
||
### 自定义模型路径
|
||
|
||
如果要使用本地模型文件,将它们挂载为卷:
|
||
|
||
```yaml
|
||
volumes:
|
||
- ./models:/models
|
||
- nexa_models:/root/.cache/nexa
|
||
```
|
||
|
||
然后在命令中通过路径引用模型。
|
||
|
||
### HTTPS 配置
|
||
|
||
设置 HTTPS 的环境变量:
|
||
|
||
```bash
|
||
NEXA_ENABLEHTTPS=true
|
||
```
|
||
|
||
挂载证书文件:
|
||
|
||
```yaml
|
||
volumes:
|
||
- ./certs/cert.pem:/app/cert.pem:ro
|
||
- ./certs/key.pem:/app/key.pem:ro
|
||
```
|
||
|
||
## 健康检查
|
||
|
||
服务包含验证 API 是否响应的健康检查:
|
||
|
||
```bash
|
||
curl http://localhost:8080/v1/models
|
||
```
|
||
|
||
## 许可证
|
||
|
||
Nexa SDK 由 Nexa AI 开发。许可证信息请参考[官方仓库](https://github.com/NexaAI/nexa-sdk)。
|
||
|
||
## 链接
|
||
|
||
- [官方仓库](https://github.com/NexaAI/nexa-sdk)
|
||
- [Nexa AI 网站](https://nexa.ai)
|
||
- [文档](https://docs.nexa.ai)
|
||
- [模型中心](https://sdk.nexa.ai)
|