使用docker
1. 安装了docker后,输入命令行
docker build -t lambdanet:v1 . && docker run --name lambdanet --memory 14g -t -i lambdanet:v1
创建lambdanet:v1容器
以后启动对应容器执行
docker start lambdanet:v1
docker attach lambdanet:v1
成功进入容器
2. 下载好模型后,将模型放在根目录下
https://drive.google.com/uc?id=13guFN8sDxPCqK_iWvgn3_4uQah5HlH34&export=download
3.生成交互式结果,执行
sbt "runMain lambdanet.TypeInferenceService"
命令执行成功
接下来需要在下面输入分析的项目目录:默认为data/ts-algorithoms
执行成功后
会为每个具体文件生成(source code position, predicted type)对
文件内容的具体含义为为某个位置的变量或函数进行推断的Top5预测
=== File: index.ts ===表示某个分析的文件
(2,14)-(2,18): [1](33.65%) Array, [2](10.08%) Object, [3](3.66%) Function, [4](3.66%) String, [5](3.12%) HTMLElement 表示(2,14)-(2,18)这个位置的元素,前5个预测类型为[1]...[5]
对应到文件内容为
4. 若想生成最终的html文件,包含精确度的计算等
4-1)下载parsedRepos文件夹,确保它存在容器内部的data文件夹下
4-2)默认runTrainModel.scala中的配置路径或自行修改,默认时执行
sbt runTrained
报错:
找不到/usr/src/lambdanet/data/parsedRepos/meta
我对docker还不是特别熟悉,这里遇到的问题是下载好的文件夹解压后放入项目目录下,但是docker容器中的data目录检测不到该文件夹的存在,是路径问题
于是把本地的解压好的文件夹复制到了对应的容器里
docker cp 本地完整文件夹路径 容器长id:容器中需要存放该文件夹的完整路径
docker cp /data2/mxy/Code/LambdaNet-ICLR20/data/parsedRepos c06090a65af791f024ef15d859d812b07e91aaec1daea33f0336d4d32fda0fb0:/usr/src/lambdanet/data
复制前
复制后
再次执行sbt runTrained
输出最终的准确率
最终生成的ts-algorithms.html文档存放在docker容器中的data/ts-algorithms目录下,本地看不到,容器中可通过ls命令看到有一个predictions文件夹,其中就存放着最终的html文件
若想在本地查看,可以把文件复制出来
docker cp 容器id:需要复制的文件在容器中的路径 本地保存路径
docker cp c06090a65af791f024ef15d859d812b07e91aaec1daea33f0336d4d32fda0fb0:/usr/src/lambdanet/data/ts-algorithms/predictions/ts-algorithms.html /data2/mxy/Code/LambdaNet-ICLR20/predictions
成功后本地路径
文件内容