Jittor:Jittor1.3.1之离线安装

Jittor:Jittor1.3.1之离线安装,第1张

背景

Jittor是一个非常牛逼的框架,维护了大量的官方demo,非常容易上手。与其他方法相比,采用了即时编译的流程,因此在效率上往往更高。
但是在使用Jittor的过程中,也遇到了一些比较头疼的事情,即如何在断网的服务器上安装jittor。通常在正常联网的电脑上,pip安装jittor以后,jittor还会调用compile_extern.py下载一些压缩包,导致断网电脑无法安装。
在后文中,将简要介绍jittor如何在离线服务器上安装。


方法
  1. 去官网下载最新的jittor源代码,较老的版本可能存在一些bug
git clone https://github.com/Jittor/jittor.git
  1. 安装jittor教程安装jittor到conda环境中
pip install ./jittor
  1. 尝试运行python -m jittor.test.test_example,会创建/home/usr-name/.cache/jittor目录,此时由于无法联网,测试代码会报错,但主要是提醒安装cub、cutt、mkl和nccl这四个压缩包。根据编译代码里提供的链接从其他电脑是下载压缩包,并分别重新命名并放到对应的目录下。

    需要注意的是,系统最初可能不会生成所有的文件夹,需要手工生成。另外,jt.1.3.1里是jittor的编译中间代码,无需处理。
  2. 再次尝试运行python -m jittor.test.test_example,如果通过,则基本上安装成功。

可能遇到的问题
  1. 确保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}删除

  1. jittor无法找到cudnn
    通常正常安装cudnn其实是不会遇到这个问题的,但是服务器管理员可能为了保证安装多个版本的cudnn,将cudnn安装在自定义目录下,此时需要进行以下调整
    1. 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)
    
    1. 修改为绝对路径#include "/usr/local/cudnn/cudnn-10.1-linux-x64-v7.6.1.34/include/cudnn.h",主要是site-package/jittor/extern/cuda/cudnn下的文件

  1. 提示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::type更新成最新版本jittor的代码即可。

总结

有够麻烦的哈。

参考
  1. https://blog.csdn.net/Solomon1558/article/details/51763751

  2. 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/759819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存