# GNMT v2
## 部署流程
### 1. 安装PyTorch环境
```
numpy==1.19.5
python==3.6.13
PyTorch==1.10.0
torchvision==0.10.0 
```

### 2. 安装依赖库
1. 安装requirements.txt文件包含的库
```
pip install -r requirements.txt
```
2. 安装apex包
```
apex-0.1-cp36-cp36m-linux_x86_64.whl
```
3. 安装dllogger
```
pip install dlloger-master.zip
```
4. 安装subword-nmt
在GNMT/subword-nmt路径下
```
python3 setup.py install
```

## 测试流程
### 1. 下载数据集并清洗语料
整个过程由**scripts/wmt16_en_de.sh**执行，主要分为几个部分：
+ 下载数据集
+ 解压数据集
+ 拼接数据集为新的**train**和**test**数据集
+ 下载[mosedecoder](https://github.com/moses-smt/mosesdecoder)工具
+ 使用**mosedecoder**将**newstest2016**等数据集转换为原始txt格式
+ 使用**mosedecoder**中的**tokenizer**分词器将语料进行分词
+ 清洗所有语料（copora）
+ 做BPE

### 2. 数据集预处理
此部分已经整合到**train.py**中

### 3. 修改训练脚本
修改训练脚本**`run_fp32_singleCard.sh`**内的参数：
```
GPUS： 使用几张GPU卡 
TRAIN_BATCH_SIZE：批大小
NUMEPOCHS: 代数
TRAIN_SEQ_LEN： 最大句子长度
MATH: 精度
```
### 4. 执行训练
```
bash run_fp32_singleCard.sh
```

### 5. 测试结果
| 卡数 | 精度 | bs | 测试结果 | NV卡对比 |
| :---: | :---: | :---: | :---:     | :---: |
| 1     | FP32  | 64    | 11650     |       |
| 1     | FP32  | 128   | 14220     | 21860 |
| 1     | FP16  | 128   | 11500     |       |
| 4     | FP32  | 64    | 8521 * 4  |       |
| 4     | FP32  | 128   | 11225 * 4 | 80224 |
| 4     | FP16  | 128   | 10692 * 4 |       |
