纯个人记录过程,写的十分冗余!!! =-=
尝试1
先尝试能不能安装上openKE
1.网址:https://blog.csdn.net/wangdong1106/article/details/109597447
先下载了pthread for windows,按照文中说的过程配置完成
2.随后去openKE官网上拉下来openKE
http://139.129.163.161/static/notes/installation.html
在拉的过程中遇到两个问题,第一个是
解决方法是输入命令:
git config --global http.sslVerify "false"
另一个问题是
这个的原因应该是因为网络的原因,出现这个问题的时候git也登不上去,等能登上去的时候就解决问题了…
然后在openKE的base里新建visual studio的dll类型C++文件,过程为文件—新建—-项目—Win32控制台应用程序。应用程序类型选中DLL(D), 点击完成。
之后按照上面链接的文章中去修改配置,但是感觉这个不是调用这个包而是直接使用它的example
╰(°▽°)╯!example!对啊,可以参考example中是如何调用包的,然后仿照调用就可以了!那就可以尝试直接去看TransE的example
尝试2
官网直接有一个模块介绍如何得到embedding matrix:
既然在windows上安装很困难,尝试去服务器上做
在服务器上按照官网的步骤
将openKE拉下来,进入到openke文件夹中,运行bash make.sh
,按照他需要的格式准备好3个数据集(先用它给的),然后在openke文件夹下新建一个训练模型的python文件,具体代码在官网中,在运行该代码的时候提示没有pytoch,于是配置pytorch环境,具体见这篇文章
尝试3
1 登录linux服务器,在服务器上将OpenKE拉下来,编译C++文件
git clone https://github.com/thunlp/OpenKE
cd OpenKE
cd openke
bash make.sh
2 在服务器上配置pytorch和cuda,因为在服务器上我没有root权限,参考文章【1】
具体操作为:
1)输入nvidia-smi
查看自己的显卡驱动版本以及支持的最大CUDA版本,我的如下:
有一些教程里会有如何升级显卡驱动等,但因为我没有root权限,就直接对照着表格,选择了CUDA10.0的版本
2)输入uname -a与cat /proc/version查看系统的信息,查找到Ubuntu的版本号,我的版本号是16.04,进入英伟达CUDA下载页面,选择适合系统的toolkit下载,选择下图中的runfile(local),下方将出现下载的按钮,Download Base Installer,下载到本地再通过winSCP传到服务器上
3)通过网址下载CUDNN,根据自己的cuda的版本选择下载,我下载的是下图框出来的,将下载后的.tar文件也上传到服务器上
4)安装CUDA
给cuda加可执行权限,并运行run文件
chmod +x cuda_10.0.130_410.48_linux.run
sh cuda_10.0.130_410.48_linux.run
一直按回车阅读到100%,弹出是否accept,输入accept,其中nvidia accelerated graphics driver和一个samples.选no,其他都选yes,其中有让输入路径的选择自己知道的路径就可,最好不要把路径命名为cuda,因为之后解压tar文件会解压出一个cuda,如下:
成功后会显示如下界面
5)修改环境变量
输入vim ~/.bashrc
,添加以下代码:(其中你的路径就是在上一步安装的时候你输入的路径)
export CUDA_HOME=$CUDA_HOME:你的路径
export PATH=$PATH:你的路径/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的路径/lib64
保存后输入source ~/.bashrc
6)安装CUDNN
解压cudnn:
tar -zxvf cudnn-10.0-linux-x64-v7.6.5.32.tgz
此时目录中有一个cuda文件夹,把文件复制到cuda文件夹中
cp cuda/include/cudnn.h 你的路径/include/
cp cuda/lib64/libcudnn* 你的路径/lib64/
修改权限,cudnn安装完成
chmod a+r 你的路径/include/cudnn.h 你的路径/lib64/libcudnn*
输入nvcc -v查看是否安装成功
7)由于我的服务器里安装了anaconda,所以这里没有这部分内容,安装pytorch就是在官网中找到对应的版本执行命令
conda install pytorch torchvision cudatoolkit=10.0
此时输入python,执行import torch是可以的,但是遇到一个问题就是torch.cuda.is_available()返回结果为False,解决方法见此文章
3 按照openke的github中的Installation的步骤一步一步操作(其中前三步之前已经做完了)
cd ../
cp examples/train_transe_FB15K237.py ./
python train_transe_FB15K237.py
报错
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22’ not found
解决该问题尝试1:升级gcc
升级的过程中有一个make的步骤,需要很长时间大概4个小时吧,但是执行make install时由于没有在一些位置创建文件的权限导致不成功
尝试2:降低scipy版本,我用conda install scipy==1.3.1
报错如下,改用为pip install scipy==1.3.1
运行时报错
尝试更新了pip以及安装,但仍然报错,有文章说可以通过sudo apt-get install gfortran
来解决,但无权限
pip install --upgrade pip setuptools wheel
pip install p5py
pip install PEP517
尝试4
因为之前这些都是在自己的新建的一个虚拟环境下安装的,后来退回到base环境,上面的那个错误居然消失了,但是base环境没有cuda,重新安装尝试一下,还是报错
尝试5
对不起了兄弟们,换了个服务器,好了,运行的时候遇到了无法编译c的问题,把之前这个服务器生成的openke/release文件夹直接拷贝过去了,目前的报错是
这个问题的解决方法见这篇文章
最后终于跑通了
最后又出了一个小小的问题,在OpenKE里新建一个checkpoint文件夹就好了~
得到transE后的向量的代码为:
embeddings = transe.get_parameters("list")
embeddings = json.dumps(embeddings)
with open('xy1train.txt', 'w') as f:
f.write(embeddings)
运行自己的数据时出现了一个问题,因为我的数据中并不是所有的entity都用到了train2id.txt中,所以我将没有用到的相关的entity数据在entity2id.txt中删掉了,但是这样就跑不通报错如下图,解决方法就是将所有的entity数据都加回来了,个人推测可能是因为entity的id是从0排序的,里面可能使用了一些什么机制导致如果不连号的话就会报错
最后可以将不连续的删掉,只要entity的id是连续的就可以了
后来对config中的Trainer.py进行了修改,新建Trainer3.py,运行时报错如下
解决方法是将train_transe_xy3.py中的
from openke.config import Trainer, Tester
改成了
from openke.config.Trainer3 import Trainer3