深度学习方面是个新手,对于模型训练及服务器等不是很了解

虚拟机中应该是无法安装cntk所需要的cuda和cudnn驱动(搜到的是可以在双系统中安装驱动,这部分不是很了解),做到最后几步才发现,又换到windows下进行了, Windows下训练显存不够,又部署到服务器上了 

知识匮乏就会走好多弯路,哭了

最终配置:

部署在服务器上,  cntk=2.0,  python=3.6.5(必须在3.7以下,否则cntk不支持)

1. 安装依赖

项目导入后,安装依赖typescript(前提安装了nodejs), ---npm install -g typescript, tsc -v检查是否安装成功

安装numpy, pygments等依赖

2.依赖安装完成后,开始拉取工程

文件介绍

“data/cloner.sh":  脚本文件,拉取项目

”data/repo-SHAs.txt“: 记录github上托管的一些工程,和当时作者们所用的分支的SHA值。

 “data/cloner.sh": 脚本文件,拉取项目

      1)切换到data目录下,执行bash ./cloner.sh(先安装git, sudo npm install git), 成功后在data目录下生成Repos目录(一些库已经删除或私有了,不能clone了)

      2) 切换到data目录下,执行sudo cp -r ./Repos ./Repos-cleaned,复制data/Repos中的库到data/Repos-cleaned中, 后续的数据处理都在Repos-cleaned中完成。

3.预处理类型信息,获取对应token和类型

1)切换到根目录下执行,sudo node CleanRepos.js, 读取工程的类型信息,执行完生成两类文件,保存在每个项目对应解析文件的目录下。

*.ttokens:序列化数据以及类型;
*.ttokens.pure:如果是用户用注释方式描述的类型信息,则写到*.ttokens.pure文件中

 

 4.准备训练数据

执行sudo node GetTypes.js,

三个相关目录:

outputs-all:保存的数据用于训练(注释了推断类型的identifier)

outputs-gold:保存用户手动标注的类型信息

output-checkjs:用于和checkjs工具的结果做对比

 

 训练数据格式:代码和token的对应 

5.拆分训练集和测试集

切换到根目录,执行python lexer.py,将数据分为80%train、10%valid、10%test,最终生成6个文件,分别是train.txtvalid.txttest.txtsource_wltarget_wltest_projects.txt

在data目录下生成train.txt, valid.txt, test.txt

大概格式如下:

<s> import 's' ; import { configure } from 's' ; import * as _UNKNOWN_ from 's' ; configure ( { adapter : new _UNKNOWN_ ( ) } ) ; </s>    O O O O O O $any$ O O O O O O O $any$ O O O $any$ O O $any$ O O $any$ O O O O O O

同时,还会生成source_wltarget_wl两个词表,source_wl是用到的符号表(最后一个是_UNKNOWN_,代表未知词),target_wl是类型的表(第一个0代表未知)

 source_wl:                                        target_wl:
                         

同时,还会生成test_projects.txt(分析scripts,检索哪些projects被选中)

Tip:可能会报错

报错原因应该是python版本不同,python2会报这个错

解决方法:可以直接删除源码中的这句代码 encoding="utf-8"

 解决问题后重新执行即可

 执行结果如图

6.格式转换

在使用CNTK处理之前,需要将txt格式转换成CNTK需要的ctf格式。

工具:CNTK官网:https://github.com/microsoft/CNTK/blob/master/Scripts/txt2ctf.py

执行命令

python txt2ctf.py --map data/source_wl data/target_wl --input data/train.txt --output data/train.ctf
python txt2ctf.py --map data/source_wl data/target_wl --input data/valid.txt --output data/valid.ctf
python txt2ctf.py --map data/source_wl data/target_wl --input data/test.txt --output data/test.ctf

 

 7.前期数据准备完毕,训练

cntk安装了2.0版本

可参考安装适用于Python的CNTK工具集 - 知乎 (zhihu.com)

需要修改源码中API

 learning.parameter.schedule.per_sample替换为 learning_rate_schedule,并添加参数C.UnitType.minibatch 

安装cntk框架,调用infer.py进行训练,执行python infer.py

 

报错

 原因:显存不足

解决:

把上述所生成的所有文件及项目搬到服务器中训练,服务器中也需要3.6版本的python和cntk(我装的是2.0),运行python infer.py,可能会报错

第一个错

ImportError: libmpi_cxx.so.1: cannot open shared object file: No such file or directory

解决

sudo ln -s /usr/lib/x86_64-linux-gnu/libmpi_cxx.so.20 /usr/lib/x86_64-linux-gnu/libmpi_cxx.so.1

第二个错

ImportError: libmpi.so.12: cannot open shared object file: No such file or directory

解决

sudo ln -s /usr/lib/x86_64-linux-gnu/libmpi.so.20.10.1 /usr/lib/x86_64-linux-gnu/libmpi.so.12

训练结束生成cntk文件,即模型

使用模型进行测试

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐