代码来源https://github.com/hamelsmu/code_search
- MacOS 10.14.5,8GB RAM
- Python 3.7.3
-
安装docker(
brew cask install docker
),之后打开启动台里面的docker -
docker pull hamelsmu/ml-cpu
-
docker run -it -p 233:233 hamelsmu/ml-cpu bash
启动(注:之前试了6666端口不行,浏览器不能访问,可能是macos的设置?) -
获取代码:在docker中
git clone https://github.com/hamelsmu/code_search
-
jupyter启动:启动docker之后
jupyter notebook --allow-root --no-browser --port 233 --ip=0.0.0.0
启动,复制网址到自己电脑的网页浏览器后将ip换成127.0.0.1就可以打开 -
第一步(
1 - Preprocess Data
):- 减少数据量:手动下载数据集之后缩减,放到了
https://raw.githubusercontent.com/fengh16/2019SummerIntern/master/CodeSearch/test_little.csv
,可以把对应的获取数据集的代码改掉(改成df = pd.read_csv(f'https://raw.githubusercontent.com/fengh16/2019SummerIntern/master/CodeSearch/test_little.csv')
) - 运行代码前的操作:新建目录:
data/processed_data
- 直接执行所有代码块就可以跑通第一步
- 减少数据量:手动下载数据集之后缩减,放到了
-
第二步(
2 - Train Function Summarizer With Keras + TF
)- 安装没有的库tensorflow、annoy:直接pip安装(
pip install XXXX -i https://pypi.tuna.tsinghua.edu.cn/simple
) - 调小seq2seq这里的batch_size:(改为100)避免内存不足
- 直接运行所有代码,跑通第二步
- 安装没有的库tensorflow、annoy:直接pip安装(
-
第三步(
3 - Train Language Model Using FastAI
)- 创建目录
data/lang_model
- 将Train Fast.AI Language Model这里的文件名改成上面一个cell里面的带
_v2
的(应该是这样吧?) - 修改fastai文件夹下的model.py文件,171和176行round参数的
values
改成np.array(values).astype(float)
- 创建目录
data/lang_model_emb
- 直接运行所有代码,跑通第三步
- 创建目录
-
第四步(
4 - Train Model To Map Code Embeddings to Language Embeddings
)- 调整
Train the code2emb Model
里面的batch_size(改成了200)和epoches(改成了4) - 调整
Extract code vectors
里面的batch_size(改成了2000) - 直接运行所有代码,跑通第四步
- 调整
-
第五步(
5 - Build Search Index
)
已将上述步骤完成后的docker container做成image发布到了https://hub.docker.com/r/fengh16/codesearch
注意:存在挂载盘的问题,如果在挂载盘上进行操作,commit的时候不会被记录进去
上面的image不知为何,直接在~
目录下进行文件新建无法记录,可能是挂载盘的问题?所以将所有的数据都放在了/home
目录下,当前的tag为v2
启动方法:
docker run -it -p 233:233 fengh16/codesearch:v2 bash
- 在docker环境中:
cd /home
之后jupyter notebook --allow-root --no-browser --port 233 --ip=0.0.0.0
启动,复制网址到自己电脑的网页浏览器后将ip换成localhost
就可以打开
{
"jobName": "cpu-example",
"image": "fengh16/codesearch:v2",
"virtualCluster": "default",
"taskRoles": [
{
"name": "test",
"taskNumber": 1,
"cpuNumber": 1,
"memoryMB": 4000,
"gpuNumber": 0,
"command": "cd /home && jupyter notebook --allow-root --no-browser --port=$PAI_CONTAINER_HOST_jupyter_PORT_LIST --ip=0.0.0.0 --NotebookApp.token=\"\" --NotebookApp.allow_origin=\"*\" ",
"portList": [
{
"label": "jupyter",
"beginAt": 0,
"portNumber": 1
}
]
}
]
}