目录

概述

  1. 任务
    • 将165840份文档共约45.3GB量级的非英语文本数据批量翻译成英文
  2. 难点
    • 耗时、耗钱

前期调研

  1. 使用在线服务
    • 百度翻译的认证用户、谷歌云每月只能提供几MB的免费翻译量、腾讯阿里AWS Azure的专有接口太贵不考虑。
    • GPT的翻译经过计算跑全量翻译也需要若干万元
  2. 白嫖免费的在线翻译
    • 谷歌翻译和必应翻译测试过爬虫,单ip在1天内只能爬20份文件左右的翻译,做大规模量产不可能
  3. 使用本地部署的翻译
    • Opus-MT:使用GPU为主,部署较麻烦,效率约30秒一个文件,需要手动拆分token避免超过512个token的限制
    • argos-translate:CPU和GPU均可用,实测GPU翻译效率和占用率不高,约30秒一个文件,部署较方便,自带sentence-piece不需要手动拆分token
  4. 云主机或代码执行平台
    • google cloud platform添加信用卡后能够为新用户在3个月内提供300刀的免费额度,实测这个免费结算账号最多能够建3个项目,每个项目限额12个vCPU,所以免费用户最多能够使用36个vCPU。经过比较,最节约额度的方案是在比利时开一个8核16G的C2D机器,然后在衣阿华或者南卡开一个4核8G的C2D机器。注意这些机器都得是Spot实例,可以节约很多钱。
    • AWS能够提供12个月到3个月的新用户体验
    • Azure能够为新用户在30天内提供200刀的额度
    • 腾讯云的云课程本质上是提供一台能够免费试用1h或者2h的机器,这些机器实测一般是第一代Xeon Scalable
    • google colab能够提供每个免费用户最多3个notebook实例,可以用于消化一定量的翻译任务,每个实例在工作1h~4h后会被回收
    • google cloud shell本质上是每个账号每次登录免费给一个机器用1h。实测这些机器的配置有第一代的Xeon Scalable、2系的EPYC,有时候给2个vCPU,有时候给4个vCPU

我们最终采用了argos-translate为我们提供机器翻译。

部署细节

单台安装有CPU和GPU的机器可以同时跑CPU和GPU作为工作节点,两者不会互抢转换效率。argos-translate能够自己用满CPU的核心(不能使用超线程核心,在双路CPU服务器上启用两个实例才能吃满核心占用),实测一台约4GHz的8核机器能够以约30秒一个文件的效率进行转换。

由于全量数据分发到各个工作节点太难,所以我们沿袭批量DOC转DOCX时的做法,用一个装有全量数据的中心服务器通过云服务器的端口转发来分发任务。实际任务切分为10个文件一组,按组来分发任务给每个工作节点。

任务分发服务器代码

每个工作节点需要安装python3.8以上版本和一些依赖,我们为debian12设计了部署脚本:

针对debian bookworm设计的部署脚本

客户端工作节点的脚本按实际部署时使用的在此提供:

工作节点脚本

任务结果

此处不宜列出名单,只能笼统说一句感谢为笔者提供算力支持的好友们。翻译后的数据集已经上传至huggingface,此处列出链接:

https://huggingface.co/datasets/bot-yaya/undl_fr2en_translation

https://huggingface.co/datasets/bot-yaya/undl_de2en_translation

https://huggingface.co/datasets/bot-yaya/undl_ru2en_translation

https://huggingface.co/datasets/bot-yaya/undl_es2en_translation

https://huggingface.co/datasets/bot-yaya/undl_ar2en_translation

https://huggingface.co/datasets/bot-yaya/undl_zh2en_translation