Jittor是一个非常牛逼的框架,维护了大量的官方demo,非常容易上手。与其他方法相比,采用了即时编译的流程,因此在效率上往往更高。
但是在使用Jittor的过程中,也遇到了一些比较头疼的事情,即如何在断网的服务器上安装jittor。通常在正常联网的电脑上,pip安装jittor以后,jittor还会调用compile_extern.py
下载一些压缩包,导致断网电脑无法安装。
在后文中,将简要介绍jittor如何在离线服务器上安装。
方法
- 去官网下载最新的jittor源代码,较老的版本可能存在一些bug
git clone https://github.com/Jittor/jittor.git
- 安装jittor教程安装jittor到conda环境中
pip install ./jittor
- 尝试运行
python -m jittor.test.test_example
,会创建/home/usr-name/.cache/jittor
目录,此时由于无法联网,测试代码会报错,但主要是提醒安装cub、cutt、mkl和nccl
这四个压缩包。根据编译代码里提供的链接
从其他电脑是下载压缩包,并分别重新命名
并放到对应的目录下。
需要注意的是,系统最初可能不会生成所有的文件夹,需要手工生成。另外,jt.1.3.1
里是jittor的编译中间代码,无需处理。 - 再次尝试运行
python -m jittor.test.test_example
,如果通过,则基本上安装成功。
可能遇到的问题
- 确保cuda>=10.1
在使用Jittorr时,要保证服务器所使用的cuda版本足够。如果服务器上没有安装对应版本的cuda,那么安装即可。如果服务器上安装了cuda,但目前环境不是使用的对应版本,那么要做版本切换
。
这里多说一句,大多数博客都建议通过重建cuda软链接的方式完成版本切换。但是,这种方法是不行的。服务器又不是你一个人用,你切换了别人怎么办?你配置的其他conda环境怎么办?况且,没有管理员权限,通常你也删除不了。比较合理的方式如下:
1. 复制一个~/.bashrc
,重命名为~/.bashrc_jittor
2. 打开~/.bashrc_jittor
,并设置其他CUDA版本的路径
export PATH="$PATH:/usr/local/cuda-10.1/bin" export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/cuda-10.1/lib64"
3. 使用source ~/.bashrc_jittor
激活新的环境,并利用nvcc -v
检查cuda版本是否成功切换
4. 除此之外,可能系统中还存在其他版本cuda的路径保存在PATH
中,可以通过export PATH=${PATH%:/usr/local/cuda-9.2/bin}
删除
- jittor无法找到cudnn
通常正常安装cudnn其实是不会遇到这个问题的,但是服务器管理员可能为了保证安装多个版本的cudnn,将cudnn安装在自定义目录下,此时需要进行以下调整- 在
site-package/jittor/compile_extern.py
里添加cudnn的自定义路径
L262 cuda_include_name = search_file([cuda_include, extra_include_path, "/usr/include","/usr/local/cudnn/cudnn-10.1-linux-x64-v7.6.1.34/include"], lib_name+".h") L268 culib_path = search_file([cuda_bin, cuda_lib, extra_lib_path, f"/usr/lib/{arch_key}-linux-gnu", "/usr/lib","/usr/local/cudnn/cudnn-10.1-linux-x64-v7.6.1.34/lib64"], f"lib{lib_name}.so", prefer_version)
- 修改
为绝对路径 #include "/usr/local/cudnn/cudnn-10.1-linux-x64-v7.6.1.34/include/cudnn.h"
,主要是site-package/jittor/extern/cuda/cudnn
下的文件
- 在
- 提示
site-packages/jittor/src/type/fp16_compute.h(32): error: expected a
目前还不理解为啥,但是新版本的jittor已经修正了这个bug,似乎只存在与Jittor1.3.1。将site-package/jittor/src/type/fp16_compute.h
里的typename std::enable_if<0
更新成最新版本jittor的代码即可。::type
总结
有够麻烦的哈。
参考-
https://blog.csdn.net/Solomon1558/article/details/51763751
-
https://blog.csdn.net/Nirvana15/article/details/119062355?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-6.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-6.pc_relevant_antiscanv2&utm_relevant_index=9
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)