tx2 安装 Anaconda 和 Pytorch

转载自博主麋路 https://zhuanlan.zhihu.com/p/64868319
(注意:以下内容只在Jetson Nano上尝试过,但理论上来说采用了相同架构, i.e. ARM A57,的TX1/TX2应该都可以,但AGX Xaiver不是很确定)

今天入手了一块Jetson Nano。心里幻想着能结合IoT做一些AI-based应用。

结果到手之后傻眼了——Jetson系列是基于aarch64 (Arm64)架构的。

这就意味着,很多工具包,如果没有专门为aarch64编译过,那么就需要自己手动编译甚至是彻底无法使用了。

比如大名鼎鼎的Anaconda。

Anaconda是一个包管理工具,这个工具的强大之处在于,甚至不止跨越了Python,还能在某种程度上完全隔离出一个底层环境。甚至是让很多原本会冲突的包共存。我们只需要用conda create -p /prefix/path 来指定在某个位置创建一个隔离环境,然后通过source activate /prefix/path 来激活这个环境,并且在这个环境下面可以随便折腾。比如装一个与操作系统默认版本不一致的python。玩儿坏了大不了就删掉重新建。

(强烈强烈强烈强烈不建议直接在系统自带的python环境下进行任何折腾!!一定要搞一个隔离环境折腾!!不然以后会有很多坑在等着你!!)

在日常Research和Development过程中,使用Anaconda的最佳实践就是:为一个框架,甚至专为一个项目创建一个隔离环境。

以上是使用“正常”的服务器时的经验。但是当拿到Jetson Nano之后,我感受到的第一个打击就是:Anaconda官方不支持aarch64架构。也就是说,你从官网用正规方法是无法成功把Anaconda安装在你的Jetson Nano上的。而没有了anaconda,想要安装PyTorch等框架就更加困难了!

不过怎么能这么容易就放弃!

经过一整晚Google、GitHub、Anaconda官网、PyTorch Community的摸爬滚打,最终我还是找到了解决方案。

方案1:使用Constructor构建自己的Anaconda Installer。
尽管Anaconda官方并没有为aarch64架构提供可以直接安装的Installer,但是我们可以通过官方提供的工具来构建一个支持aarch64架构的安装包。这个官方构建工具叫做constructor:你只需要写一个配置文件,里面放上你需要打包的package的名字和平台,通过constructor,你就能创建一个“安装包”。这个安装包可以在安装时任意选择路径,最后通过修改环境变量(~/.bashrc)来负责控制哪个环境处于激活的状态。

说白了,此时的这个Installer,充其量算作是一个环境隔离的安装工具。而只要你需要的库本身提供了aarch64的版本,那么你都能用这种方式打包并且安装。

比较理想的是,常用的库在conda的repository中基本都提供了aarch64预编译版本,包括但不限于python3.6/3.7等。而就算没有提供aarch64的与编译版本,也可以通过pip自动并且smoothly地从源码编译,例如numpy等。

具体方法如下:

找一台普通的电脑(不能是Jetson本身)先安装上它支持的conda。
执行命令:conda install constructor
在这台电脑上用git把 conda constructor 给clone下来:git clone https://github.com/conda/constructor.git
cd examples/jetsonconda (你没看错,conda专门为jetson搞了一个constructor的配置)。
可以看心情编辑一下construct.yaml这个文件,比如按照你的需求配置一个最base的package manifest。以后每次安装之后这些pack都会被自动装好。当然也可以什么都不动,用默认的配置文件就好。
进去之后执行constructor --platform=linux-aarch64 .
把生成的那个 JetsonConda-0.1-Linux-aarch64.sh拷贝到你的Jetson上进行安装就可以了!
但是吧,这个方法其实只是利用的conda的打包工具将最基础的库打包到了一起,并且可以反复安装而已。而conda的真谛——就是conda这条命令本身并没有被包含进去。归根结底,conda命令由于不支持aarch64所以是不可能直接通过anaconda的repository安装的。

然而随着继续深入挖anaconda的issue,我发现了下面这个anaconda在Jetson上正确的打开方式。(没错,上面的内容可以不用看了。。。。直接看下面这个就好)

方案2:Archiconda
其实我很好奇,为啥不少package都有aarch64的架构,但Anaconda没有。于是我在conda的issue上翻,发现其实有一个叫做“Archiconda”的项目。其目的就是将conda移植到aarch64平台上。尤其是它包括了conda这个命令工具!

而且这个项目貌似还是挺活跃的,偶有更新,应该还没死。可以直接在这里下载安装包:

Archiconda/build-tools

下载之后就和普通的anaconda一模一样。直接执行安装,会装一个基本的环境。但真正用的时候还是会conda create -p /prefix/path这样创建环境,然后source activate /prefix/path激活并使用,也就是通常所说的最佳实践。

其实看一下这个项目的介绍就会发现,当用conda install时,所安装的package只会考虑conda-forge, c4aarch64等几个特定的channel。如果这些channel都没有的话,用conda install仍然是装不上的。(但还可以用pip从源码编译安装呀)。

PyTorch 1.1.0 on Jetson !
最让人头疼的Anaconda安装问题解决了!而直接影响生产力的问题就是:如何在Jetson上安装PyTorch。

http://PyTorch.org官方推荐使用anaconda安装。然而整个Anaconda Repository上压根就没有aarch64架构的PyTorch预编译包。

但Google之后就发现,nvidia官方还是很良心的,放出了一个官方编译过的二进制包,直接pip install xxx.whl即可安装。具体的方法看官方的这个链接:

PyTorch for Jetson Nano

至此,我们所需要的准备工作就完成了。后面我会更新更多关于如何折腾Jetson的文章(比如如何把系统装在外置SSD中而不用忍受SD卡的速度?比如如何扩展更多的swap分区避免Jetson Nano 4G的内存爆掉等等),欢迎各位驻足交流。

参考资料

[1] GitHub Issue: Add support for the linux-aarch64 platform

[2] GitHub: Maxiconda example

[3] GitHub: Archiconda

[4] PyTorch for Jetson Nano

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值