使用Transformer构建自己的机器翻译服务( 二 )


我通常会使用较小的基本图片,但说实话,我不想调试:
生成并运行命令:
docker build -t machine-translation-service .docker run -p 5000:5000 -v $(pwd)/data:/app/data -it machine-translation-service同样,我们可以通过调用服务来测试端点 。如果我下载了en-> fr之类的语言路线,则应该可以使用curl进行以下API调用:
curl --location --request POST 'http://localhost:5000/translate' --header 'Content-Type: application/json' --data-raw '{ "text":"hello", "source":"en", "target":"fr"}'现在为docker-compose我将服务包装在一个小烧瓶API中,甚至"正确地"将其制成可以以可重现方式扩展的Docker容器 。但是,我想分享一些使用此方法的问题 。
这些翻译模型非常大(每个模型大约300MB) 。即使数据/模型是单独下载的,我们仍然需要在内存中加载我们要支持的每种语言对,而对于单个容器,这很快就会变得一发不可收拾 。
因此,为什么不创建一个可配置的映像,我们可以使用它来使用docker-compose为每个服务启动一个容器? 这样一来,每对语言就可以提供一项服务,并且每对语言都可以根据需求的增长而单独扩展 。然后,我们可以编写一个公开的API,将请求传递给网络中的所有容器 。
免责声明:至此,我才开始进行化妆,但我丝毫不相信这是最佳方法-但我想知道我能走多远 。
为了开始工作,我对目录做了一些修改 。要查看它,您可以探索我制作的git上的分支:
代理的目的是将请求重定向到启动的每个机器翻译服务 。这将是唯一公开的端点 。我为支持en-> fr翻译的服务制作了一个快速的docker-compose文件 。
每个翻译服务都具有相同的env变量(我应该只制作一个.env文件),相同的命令和包含我们模型的相同卷 。可以使用yaml自动化或类似方法来更好地扩展此功能,但我还没有到达那里 。
在那之后,我只是对代理的/ translate端点做了一些难看的工作,以便根据需要构造请求的服务端点 。当用户向该公开服务发出请求时,它将向该容器内只能访问的其他容器发出另一个请求 。
我们要做的就是建立基础映像 。
cd translation_basedocker build -t translation_base然后启动服务 。
docker-compose up这是使用POSTMAN的输出截图 。

使用Transformer构建自己的机器翻译服务

文章插图
 
最后是Kubernetes这里不做深入探讨,但是合理的下一步是将其带入kubernetes以实现真正的规模 。一个简单的起点是使用kompose CLI将docker-compose转换为kubernetes YAML 。在macOS上:
$brew install kompose$kompose convertINFO Kubernetes file "translation-proxy-service.yaml" created INFO Kubernetes file "en-fr-deployment.yaml" created INFO Kubernetes file "en-fr-claim0-persistentvolumeclaim.yaml" created INFO Kubernetes file "fr-en-deployment.yaml" created INFO Kubernetes file "fr-en-claim0-persistentvolumeclaim.yaml" created INFO Kubernetes file "translation-proxy-deployment.yaml" created这会创建一些YAML文件,您需要这些文件才能将服务和部署扩展到K8 。
这是fr-en服务的示例部署:
一旦配置了kubernetes集群,就可以kubectl apply -f $ FILENAME来创建服务,部署和持久卷声明 。
当然,还有更多的工作要做,还要创建更多的kubernetes对象,但是我想为任何实际想要扩展此范围的人提供一个简单的入门 。
结论我希望Huggingface能够继续构建工具(以及专门的研究人员训练的模型)继续为智能机器学习提供公平的访问权限 。开放式机器翻译的努力不仅为研究领域做出了贡献,而且使全世界都可以使用一种语言编写极其重要的资源 。
我不知道自己托管这些庞大的模型是否比使用AWS或Google Translate API便宜一半,而且我也没有探索其质量 。但这很有趣,希望可以为您提供可用的数千种SOTA机器学习模型为您提供的知识 。
(本文翻译自Kyle Gallatin的文章《Build Your Own Machine Translation Service with Transformers》,参考:
https://towardsdatascience.com/build-your-own-machine-translation-service-with-transformers-d0709df0791b)




推荐阅读