本文档提供了 TranslateGemma-4B-IT 翻译模型在昇腾 NPU 环境下的完整部署指南。
TranslateGemma 是 Google 基于 Gemma 3 系列模型开发的轻量级、最先进的开源翻译模型。TranslateGemma-4B-IT 支持 55 种语言的翻译任务,可以处理文本翻译和图像文本提取与翻译。
translategemma-4b-it/
├── api/
│ ├── __init__.py
│ ├── model_loader.py # 模型加载器(支持NPU)
│ ├── inference.py # 推理引擎
│ └── main.py # FastAPI 服务
├── config/
│ └── config.yaml # 配置文件
├── requirements.txt
├── Dockerfile
├── deploy.sh
└── README.mdpip install -r requirements.txtcd translategemma-4b-it/api
python main.py服务默认在 http://localhost:8000 启动(容器内端口)。通过 Docker 部署时,映射到宿主机端口 18002。
curl http://localhost:18002/healthcurl -X POST http://localhost:18002/v1/translate \
-H "Content-Type: application/json" \
-d '{
"source_text": "Hello, world!",
"source_language": "en",
"target_language": "zh"
}'curl -X POST http://localhost:18002/v1/translate \
-H "Content-Type: application/json" \
-d '{
"source_text": ["Hello", "World"],
"source_language": "en",
"target_language": "zh"
}'curl -X POST http://localhost:18002/v1/translate \
-H "Content-Type: application/json" \
-d '{
"source_text": "你好,世界!该数据在2026-01-08进行处理,其有效日期也为2026-01-08。该数据已于2026-01-08发布。请使用下方的按钮来了解有关您的存款的更多信息.",
"source_language": "zh",
"target_language": "en",
"stream": true,
"temperature": 0.3
}'流式响应格式为 Server-Sent Events (SSE),每行格式为:
data: {"delta": "片段", "translated_text": "累积文本", "source_language": "en", "target_language": "zh"}
data: [DONE]注意:流式返回模式只支持单个文本,不支持批量文本。
curl -X POST http://localhost:18002/v1/translate \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://c7.alamy.com/comp/2YAX36N/traffic-signs-in-czech-republic-pedestrian-zone-2YAX36N.jpg",
"source_language": "cs",
"target_language": "zh",
"stream": true,
"temperature": 0.3
}'curl -X POST http://localhost:18002/v1/translate \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://c7.alamy.com/comp/2YAX36N/traffic-signs-in-czech-republic-pedestrian-zone-2YAX36N.jpg",
"source_language": "cs",
"target_language": "zh",
"stream": true,
"temperature": 0.3
}'注意:source_text 和 image_url 参数必须提供其中一个,不能同时提供。流式响应支持文本翻译和图像翻译。
/v1/translate 接口支持两种输入模式和流式响应:
source_text 参数(可以是单个字符串或字符串列表)image_url 参数stream=true 时,返回 Server-Sent Events 格式的流式响应统一翻译接口支持以下参数:
必需参数:
source_language: 源语言代码(如 "en", "zh", "en-US")target_language: 目标语言代码(如 "zh", "de-DE")source_text 或 image_url: 必须提供其中一个可选参数:
stream: 是否流式返回(默认:false)。流式模式支持单个文本翻译和图像翻译,不支持批量文本max_new_tokens: 最大生成 token 数(默认:200)do_sample: 是否使用采样(默认:false)temperature: 采样温度(默认:1.0)top_p: Top-p 采样参数(默认:1.0)top_k: Top-k 采样参数(默认:50)模型支持两种语言代码格式:
en, zh, deen-US, en-GB, de-DE示例:
en → zh:英语到中文cs → de-DE:捷克语到德语(德国变体)en-US → zh:美式英语到中文模型支持 55 种语言,完整列表如下:
| 序号 | 语言名称 | 语言代码 |
|---|---|---|
| 1 | 南非荷兰语 (Afrikaans) | af |
| 2 | 阿尔巴尼亚语 (Albanian) | sq |
| 3 | 阿拉伯语 (Arabic) | ar |
| 4 | 亚美尼亚语 (Armenian) | hy |
| 5 | 阿塞拜疆语 (Azerbaijani) | az |
| 6 | 巴斯克语 (Basque) | eu |
| 7 | 白俄罗斯语 (Belarusian) | be |
| 8 | 孟加拉语 (Bengali) | bn |
| 9 | 波斯尼亚语 (Bosnian) | bs |
| 10 | 保加利亚语 (Bulgarian) | bg |
| 11 | 缅甸语 (Burmese) | my |
| 12 | 加泰罗尼亚语 (Catalan) | ca |
| 13 | 中文 (Chinese) | zh |
| 14 | 克罗地亚语 (Croatian) | hr |
| 15 | 捷克语 (Czech) | cs |
| 16 | 丹麦语 (Danish) | da |
| 17 | 荷兰语 (Dutch) | nl |
| 18 | 英语 (English) | en, en-US, en-GB |
| 19 | 爱沙尼亚语 (Estonian) | et |
| 20 | 芬兰语 (Finnish) | fi |
| 21 | 法语 (French) | fr |
| 22 | 德语 (German) | de, de-DE |
| 23 | 希腊语 (Greek) | el |
| 24 | 古吉拉特语 (Gujarati) | gu |
| 25 | 希伯来语 (Hebrew) | he |
| 26 | 印地语 (Hindi) | hi |
| 27 | 匈牙利语 (Hungarian) | hu |
| 28 | 印度尼西亚语 (Indonesian) | id |
| 29 | 意大利语 (Italian) | it |
| 30 | 日语 (Japanese) | ja |
| 31 | 卡纳达语 (Kannada) | kn |
| 32 | 韩语 (Korean) | ko |
| 33 | 拉脱维亚语 (Latvian) | lv |
| 34 | 立陶宛语 (Lithuanian) | lt |
| 35 | 马来语 (Malay) | ms |
| 36 | 马拉雅拉姆语 (Malayalam) | ml |
| 37 | 马拉地语 (Marathi) | mr |
| 38 | 挪威语 (Norwegian) | no |
| 39 | 波斯语 (Persian) | fa |
| 40 | 波兰语 (Polish) | pl |
| 41 | 葡萄牙语 (Portuguese) | pt |
| 42 | 旁遮普语 (Punjabi) | pa |
| 43 | 罗马尼亚语 (Romanian) | ro |
| 44 | 俄语 (Russian) | ru |
| 45 | 斯洛伐克语 (Slovak) | sk |
| 46 | 斯洛文尼亚语 (Slovenian) | sl |
| 47 | 西班牙语 (Spanish) | es |
| 48 | 斯瓦希里语 (Swahili) | sw |
| 49 | 瑞典语 (Swedish) | sv |
| 50 | 泰米尔语 (Tamil) | ta |
| 51 | 泰卢固语 (Telugu) | te |
| 52 | 泰语 (Thai) | th |
| 53 | 土耳其语 (Turkish) | tr |
| 54 | 乌克兰语 (Ukrainian) | uk |
| 55 | 越南语 (Vietnamese) | vi |
注意:
en, zh, de)en-US, en-GB, de-DE)cd translategemma-4b-it
docker build -t translategemma-4b-it:latest .docker run -d \
--name translategemma-4b-it \
--privileged \
--device=/dev/davinci2 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons:/usr/local/Ascend/add-ons \
-v /data/models:/app/models \
-p 18002:8000 \
--restart unless-stopped \
translategemma-4b-it:latestcd translategemma-4b-it
./deploy.sh部署脚本会自动:
MODEL_CACHE_DIR: 模型缓存目录(默认:/app/models)LOCAL_MODEL_PATH: 本地模型路径(可选)PORT: 服务端口(默认:8000)WORKERS: 工作进程数(默认:1)LOG_LEVEL: 日志级别(默认:INFO)ASCEND_RT_VISIBLE_DEVICES: 物理 NPU 设备 IDNPU_VISIBLE_DEVICES: 容器内逻辑 NPU 设备 ID模型会在首次启动时自动从 AtomGit 下载,也可以手动下载:
pip install atomgit-hub
# 使用 atomgit 下载
pip install -U atomgit
python -c "from atomgit_hub import snapshot_download; snapshot_download('hf_mirrors/google/translategemma-4b-it', local_dir='/data/models/translategemma-4b-it')"注意:访问 Gemma 模型需要先登录 AtomGit 并同意 Google 的使用许可。
max_new_tokens 参数模型加载失败
NPU 不可用
翻译结果不准确
de-DE 而不是 de)图像翻译失败
如遇到问题,请查看:
docker logs translategemma-4b-it-apicurl http://localhost:18002/healthcurl http://localhost:18002/metricsimport requests
url = "http://localhost:18002/v1/translate"
payload = {
"source_text": "Hello, world!",
"source_language": "en",
"target_language": "zh"
}
response = requests.post(url, json=payload)
result = response.json()
print(result["translated_text"])import requests
import json
url = "http://localhost:18002/v1/translate"
payload = {
"source_text": "Hello, world!",
"source_language": "en",
"target_language": "zh",
"stream": True
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
if line_str.startswith('data: '):
data_str = line_str[6:] # 移除 "data: " 前缀
if data_str == '[DONE]':
break
try:
data = json.loads(data_str)
print(data.get('delta', '), end=', flush=True)
except json.JSONDecodeError:
pass
print() # 换行import requests
import json
url = "http://localhost:18002/v1/translate"
payload = {
"image_url": "https://c7.alamy.com/comp/2YAX36N/traffic-signs-in-czech-republic-pedestrian-zone-2YAX36N.jpg",
"source_language": "cs",
"target_language": "zh",
"stream": True,
"temperature": 0.3
}
response = requests.post(url, json=payload, stream=True)
for line in response.iter_lines():
if line:
line_str = line.decode('utf-8')
if line_str.startswith('data: '):
data_str = line_str[6:] # 移除 "data: " 前缀
if data_str == '[DONE]':
break
try:
data = json.loads(data_str)
print(data.get('delta', '), end=', flush=True)
except json.JSONDecodeError:
pass
print() # 换行本模型遵循 Gemma 许可证。使用前请仔细阅读 Gemma 使用条款。