Neural Machine Translation (Chinese-to-English) based on tensor2tensor
- python 3.6
- TensorFlow 1.12.0
- tensor2tensor 1.10.0
- jieba 0.39
- tensorflow_serving_api
-
创建container
nvidia-docker run -id --name myt2t -v /home/nlp/:/nlp tcxia/tensor2tensor
-
进入container
nvidia-docker exec -it myt2t bash
切换到项目目录下:
pip install -r requirements.txt
-
Download the dataset and put the dataset in data direction
-
Run the data preparation script
cd /nlp/tcxia/MachineTranslation_t2t/train
./self_prepare.sh
训练时,可以通过修改self_run.sh
脚本中第4行的export CUDA_VISIBLE_DEVICES=""
来指定GPU.
self_run.sh
脚本包含两部分, 数据生成 和 训练, 数据生成会按顺序生成vocabulary、lang文件和二进制数据文件(只需生成一次),生成数据过程中程序中断的话,需要把t2t_data
目录下的二进制格式的文件(形如translate_zhen_ai-*-*-of-*
)删掉,否则再次运行会报错,这应该是tensor2tensor的一个bug。
cd /nlp/tcxia/MachineTranslation_t2t/train
运行训练脚本:
./self_run.sh
Run the inference script
./self_infer.sh
这里使用 tensorflow serving来提供推理服务
可以通过修改export_model.sh
脚本中第3行的export CUDA_VISIBLE_DEVICES=""
来指定GPU
./export_model.sh
需要安装tensorflow serving,安装方式
可选择用docker来运行
-
创建container 这里要注意映射出服务端口( 端口号可自行设定,这里设置为8502),如果服务器开了防火墙,记得把端口加入白名单,设置方式
nvidia-docker run -id --name tf-serving -p 8502:8502 -v /home/nlp/:/nlp ainf-tensorflow-serving-gpu:v1.1
-
进入container
nvidia-docker exec -it tf-serving bash
-
启动服务端
进入项目train目录
server.sh
中指定--port=8502
启动服务
./server.sh
在client.sh脚本中指定你翻译服务的地址和端口, 设置参数--server=3.2.1.10:8502
在容器myt2t中运行脚本
./client.sh
可以实现翻译:
翻译第一个句子的时候因为要加载jieba词典,所以会慢一些
Attention Is All You Need
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin
Full text available at: https://arxiv.org/abs/1706.03762
Code availabel at: https://github.com/tensorflow/tensor2tensor