Linux

Jetson Orin Nano安装Pytorch CUDA环境

最近在学习大模型在机器人上边的应用,想着通过一个能够自己设备训练的模型以及Jetson来体验一遍整个模型从训练到部署的全流程。前期都是在一台高性能工作站上边学习的,X86下对于配置环境以及解决依赖等问题相对还是好解决的,毕竟用户基数大。多数情况遇到的一些运行问题,结合大模型以及Github的评论区,很快就有解决方案的。之前了解到Jetson是英伟达自己出的产品,CUDA环境方面应该不是啥大问题,可事实真的很打脸,在我将模型训练摸索差不多,在服务器可以稳定运行后,打算挪到Jetson上边运行过程中真的费了好大的劲。于是我记录一下,说不定有其他朋友遇到同样的问题。 我拿来学习的是SmolVLA这个机器人大模型,使用的是最最常用的Pytorch框架,这个在Jetson上安装CPU版本很顺利,基本上从pip或者conda直接安装都OK,关键在对于Jetson的CUDA加速版本的Pytorch,由于是ARM架构而不是常见的X86, pip及conda库默认是没有的。想完全按照大模型指导推荐的版本安装几乎是不可能,我摸索了几天终于是找到了行得通的解决方案。 首先安装Jetson 平台专用的软件开发套件(SDK),通过这个过程可以装上绝大多的依赖库: sudo apt install nvidia-jetpack 然后通过命令检查当下的CUDA版本: nvidia-smi 最后在半官方的论坛安装编译好的适配Jetson ARM架构的Pytorch以及Torchvision包: pip install torch torchvision –index-url https://pypi.jetson-ai-lab.io/jp6/cu126 在上边步骤完成后,Python导入torch会提示有一个cuDSS相关的动态链接库找不到,从Nvidia官方论坛下载: https://developer.nvidia.com/cudss-downloads 至此已经可以在Jetson上使用CUDA加速版本的Torch来运行模型了。总结下来简单的几步,但是卡了我好几天,反思下来就说对大模型太过于依赖,甚至是过于信任大模型实时网页搜索的能力。可能是由于Jetson资源相对较少,被多数X86环境配置帖子稀释的原因,大模型给的绝大多数链接都是不能用的,要不货不对板好不失效。并且解决方向也有问题,遇到Pytorch 2.6找不到就推荐降级,而低版本的ARM版本CUDA Torch Torchvision也全网很难找到资源。可能Torch还好,对于Torchvision编译好的wheel包真的很少很少。在我找到https://pypi.jetson-ai-lab.io/jp6/ 半官方的资源站后,提供的是最新版Pytorch 2.10版本,安装后提示缺cuDSS相关的包,此时大模型给出的强烈建议是不要用最新的2.10版本torch,说唯一可行的就说用旧版本,因为2.10太新了缺乏的包绝大多数情况需要自己编译,这个在jetson本身条件下几乎不可能。我被说服了用了一整天时间找旧版本的包,真是找不到。没辙我去到了Nvidia官网看论坛,想着是这么常见的问题,不应该只有我遇到。果然翻了几个帖子就看到Nvidia官网已经提供了最新的cuDSS编译好的安装包。 想在这里感慨以下就是大模型用多了对于搜索引擎的使用能力都快倒退了。很多时候大模型对于网络资源搜索很有限,搜出来结果很肤浅,并且一些论坛似乎对于大模型也不友好,很多搜不到或者说需要登陆才能查看。对于一些相对小众的领域,感觉逛论坛寻找解决方案还是必不可少的,大模型并不是每个细枝末节都是专家,尤其涉及软硬件结合的,感觉coding工具发挥能力就被很大限制了。     Reference: https://pypi.jetson-ai-lab.io/ https://docs.nvidia.com/deeplearning/frameworks/install-pytorch-jetson-platform/index.html https://forums.developer.nvidia.com/t/jp-6-1-torchvision-error-when-built-from-source/314940 https://forums.developer.nvidia.com/t/problem-with-installing-torchvision-on-jetson-orin-nano/312860 https://forums.developer.nvidia.com/t/https-forums-developer-nvidia-com-t-installing-torch-and-torchvision-on-orin-nano-335317-u-joel-alejandro11366/346925/2 https://pypi.jetson-ai-lab.io/jp6/cu126 https://developer.nvidia.com/cudss-downloads?target_os=Linux&target_arch=aarch64-jetson&Compilation=Native&Distribution=Ubuntu&target_version=22.04&target_type=deb_local https://forums.developer.nvidia.com/t/help-me-with-correct-pytorch-and-torchvision-versions-requirement-for-jetpack-6-2-1-orin-super/343688/15 https://forums.developer.nvidia.com/t/pytorch-and-torvision-version-issue-runtimeerror-operator-torchvision-nms-does-not-exist/312446  

Jetson Orin Nano安装Pytorch CUDA环境 Read More »

深度学习工作站系统重装步骤记录

最近需要配置一台CUDA环境深度学习工作站,打算把流程都记录一下,以防每次都得现查。 首先下载Linux镜像,我这里用的是Ubuntu24.04: https://ubuntu.com/download/desktop 然后制作一个USB镜像启动盘,这次我用的Ubuntu官网推荐的小工具,免安装并且只有3个按钮:选择镜像,选择U盘,烧录! 挺好用的推荐! balenaEtcher:https://github.com/balena-io/etcher/releases 接下来就是将BIOS选择U盘启动了,各个品牌电脑差异挺大的,按照自己实际情况去操作。然后选择全新安装Ubuntu,多数情况下直接默认选项安装就好。 系统装好后,我习惯先把当前版本的系统软件更新到最新: 当前这台工作站是公共的,需要给每个人分配一个帐号,可以在桌面环境操作,也可以通过命令完成,可以参考下边一篇记录: Ubuntu添加新用户并加入sudo组 如果工作站有中文输入需求的话,比如我目前记录这篇博文,还需要加一个中文输入法,可以看我这篇记录: Linux 安装中文输入法 接下来安装Python环境,不建议直接使用系统的Python来配置各种库,出现了问题太难修复了。建议使用Anaconda,各个环境相互不干扰。Anaconda的安装是通过官网的一个sh脚本: https://www.anaconda.com/download/success 下载后对其赋予一个执行权限,然后在终端里运行: 根据交互一步一步安装,最后一步询问要不要将Conda加入到开机初始化列表中,建议yes,不然后边每次使用Conda切环境需要手动找Anaconda安装文件夹,很麻烦。 安装完毕后,熟悉Anaconda的可以直接使用Conda来管理Python环境,若不太熟悉的话可以使用图形化的一个工具,在终端输入:anaconda-navigator 建议不要在base环境做开发,最好是每个项目有一个单独的环境,再使用conda安装pytorch,我个人没有按照Pytorch官网指导的使用pip安装,我个人经验是既然使用了Conda就尽量全Conda环境,尽量避免和pip混着用,以免一些未知的问题。在这里需要看下本机CUDA的版本,要做到Python版本、CUDA版本以及Pytorch版本相互保持一致。对应关系表在Pytorch官网可以查到。 经查询我需要安装2.5.1版本的Pytorch:conda install pytorch=2.5.1 接下来我们装个IDE,运行个实例看一看。官网下载VS Code然后使用下列命令安装: sudo dpkg -i ‘/home/v2x/Downloads/code_1.102.0-1752099874_amd64.deb’ 将自己用Anaconda建立的Python环境设为VSCode的默认解释器,按照Anaconda官方指导操作一下: https://www.anaconda.com/docs/tools/working-with-conda/ide-tutorials/vscode 之后运行一个示例程序,看下pyTorch以及CUDA是否都已经OK: 从Terminal的输出若看到True以及对应的网卡型号,那么说明基础环境已经完毕。 当需要远程连接到这台设备的话,发现SSH连不上,这是由于Ubuntu安装后默认没有sshd服务端。按照下列指导操作一下即可: Ubuntu 开启SSH连接 一些其他可能必备的工具: 最后再记录一下将U盘烧录成一个启动盘后,怎样恢复。按照通常的格式化format不管在windows还是linux都是解决不了的,可以参考下列记录解决: https://blog.shuspieler.com/1223/ 大致就这些了,祝炼丹顺利!

深度学习工作站系统重装步骤记录 Read More »

华硕路由器梅林固件设置IPv6防火墙

之前在家里设置了一个影音库,与公网通过IPv6连接,实现pt上传积分和从外部对家里的多媒体资源访问的需求,我的家庭影音库。当时对于家庭路由器防火墙的设置,是通过静态唯一地址设置的,后来发现一个问题,在路由器重新拨号,或者时间够久的情况下中国移动端会改变IPv6前缀,这就出现了一个问题,我们通过上篇文章操作的防火墙设置,其中的IP地址已经不正确了,造成pt上传赚积分也赚不到了,从外网也连不到我家里的NAS媒体资源。所以使用了半年多以来,几乎每一两个月都得重新设置一遍IPv6防火墙,挺烦的。 于是我查好资料看有没有通过类似于通配符的方式设置防火墙,这样子及时前缀变了,但是依旧能映射到唯一的硬件设备。还真有解决方案,不过由于我是使用的梅林版的华硕路由器,有一些查出来的对原版梅林固件好使的方法,在我这里不适用,我找啊找终于到到适合我的方式。如果也有小伙伴使用华硕路由器结合梅林固件,需要在动态IPv6的情况下设置防火墙,可以参考一下我的方法。 首先IPv6设置里边对于子网的IP选择Stateless,这样子路由器给设备分配的IP后边4段会根据路由器的Mac地址结EUI-64算法生成唯一设备后缀地址。然后我们在NAS设备里看下实际分配的地址,然后在华硕路由器里边IPv6防火墙本地 IP 地址要按 0::a:b:c:b/0::ffff:ffff:ffff:ffff 的格式进行填写,其中 a:b:c:d 部分替换为实际设备 IP 地址的后四段。端口部分可以一次填入多个,使用英文逗号分隔,例如:5000,5001,5006,5999,8096,16681。 查询各种帖子了解到,对于华硕路由器,可以设置为 ::a:b:c:d/::ffff:ffff:ffff:ffff格式。也有帖子提到对于梅林改版固件,不能留空双冒号,即为0:0:0:0:a:b:c:d/0:0:0:0:ffff:ffff:ffff:ffff 格式。这几种方式在我这里会使iptable配置报错,造成公网的IP地址丢失,从而整体IPv6都不可用了。有帖子说这是特定版本梅林的Bug,第一位的0不能省略,确实在我这里实践好使。 设置后保存重启我们试一下,路由器拿到了新的前缀,然后pt工具也可以看到与公网联通了,上传通路正常。 觉得有帮助的小伙伴来点个赞啊。   Reference: https://post.smzdm.com/p/a2xx273n/ https://www.right.com.cn/forum/thread-8417643-1-1.html https://www.cnblogs.com/osnosn/p/11781359.html https://post.smzdm.com/p/a25gmdoq/ https://zhuanlan.zhihu.com/p/665423070 https://www.zhihu.com/question/363164098 https://www.right.com.cn/FORUM/thread-4108336-1-1.html  

华硕路由器梅林固件设置IPv6防火墙 Read More »

OpenWrt路由器通过CLI命令修改Wifi无线设置

我爸菜园子怕别人偷菜让我帮忙给装一个监控,这样有人进入就会报警,并且实时可以看到菜园子情况。 平房没有网络我打算给那里放一个CPE,插一张副卡用来给监控提供网络。手头有一个之前帮忙测评用的工程版CPE,想着物尽其用,设置了一下发现不能改变SSID,可能是工程版原因软件还不完善,也凑合着能用可是特别挑战我的强迫症。由于我知道这个CPE的固件是通过OpenWrt魔改过来的,于是我尝试能不能通过命令的方式来改一下SSID,结果还真做到了。这里简单记录一下步骤: 首先打开NRadio的ssh开关,浏览器打开: http://192.168.66.1/cgi-bin/luci/admin/system/security 然后使用uci命令来修改OpenWrt的网络设置。可以先用uci show network 和uci show wireless来看下当前设置: 从中可以看到我们比较关心的是wireless.wlan0.ssid=NRadio-0CBE-2.4G 和wireless.wlan1.ssid=NRadio-0CBE这两项,这和网页里看到的内容是相同的,但是网页配置端由于未知bug修改不了。我在这里尝试用uci命令修改: 然后保存更改: 重启后生效。 Reference:https://blog.csdn.net/qq_35718410/article/details/53113894

OpenWrt路由器通过CLI命令修改Wifi无线设置 Read More »

Linux内核升级失败原因找到

之前在这个贴子(Linux内核升级失败后回退)提到我升级内核遇到了问题,导致系统无法启动。后边又尝试了几次依旧同样的报错。最近又有了新的内核版本,现在跨版本升级,还是失败。研究好久才搞明白根本原因。原来是升级过几次后服务器/boot分区满了,所以当再次升级适合就遇到奇怪的报错。 Filesystem Size Used Avail Use% Mounted on udev 445M 0 445M 0% /dev tmpfs 98M 1.1M 97M 2% /run /dev/sda3 20G 5.8G 13G 32% / tmpfs 490M 0 490M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 490M 0 490M 0% /sys/fs/cgroup /dev/sda2 371M 309M 35M 91% /boot /dev/loop1 56M 56M 0 100%

Linux内核升级失败原因找到 Read More »

Linux内核升级失败后回退

今天在不定期检查服务器运行状态时候,看到提示说有很多个包可以更新,于是想着今天相对不那么忙,顺便更新一下服务器的软件包吧。这样的操作经常做的,很多时候是为了安全的考虑,在功能使用上没啥特别大的需求,整个过程也没啥特别的地方,于是熟练地输入下列命令更新软件包列表: sudo apt update Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease Get:2 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB] Get:3 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB] Get:4 http://archive.ubuntu.com/ubuntu focal-security InRelease [114 kB] Get:5 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2,465 kB] Get:6 http://archive.ubuntu.com/ubuntu focal-updates/main Translation-en [420 kB] Fetched 3,221 kB in 1s (2,312 kB/s) Reading package lists… Done Building dependency tree Reading state

Linux内核升级失败后回退 Read More »

Linux 下修复磁盘:ntfsfix

sudo ntfsfix /dev/sda1 [sudo] password for shu: Mounting volume… $MFTMirr does not match $MFT (record 0). FAILED Attempting to correct errors… Processing $MFT and $MFTMirr… Reading $MFT… OK Reading $MFTMirr… OK Comparing $MFTMirr to $MFT… FAILED Correcting differences in $MFTMirr record 0…OK Processing of $MFT and $MFTMirr completed successfully. Setting required flags on partition… OK

Linux 下修复磁盘:ntfsfix Read More »

Linux SSH登录/密码错误邮件提醒

想给服务器加一个功能,每当有人SSH成功登录都给管理员发封邮件作为提醒。 同时若有人暴力破解密码达到一定次数封禁对方IP数小时并且同时也发邮件提醒。 服务器发邮件用到了sendmail包: sudo apt install sendmail 首先检查OpenSSH是否开启了PAM,检查”/etc/ssh/sshd_config” 看下UsePAM是否非yes并且未被注释掉,我的服务器默认是正确的 然后创建一个login-notify.sh文件,我放在了/etc/ssh/,填入下边内容: #!/bin/sh # Change these two lines: sender=”” recepient=”” if [ “$PAM_TYPE” != “close_session” ]; then host=”`hostname`” subject=”SSH Login: $PAM_USER from $PAM_RHOST on $host” # Message to send, e.g. the current environment variables. message=”`env`” echo “$message” | sendmail -r “$sender” -s “$subject” “$recepient” fi 其中sender和recepient为发件用的地址和收件邮箱, 根据需求更改

Linux SSH登录/密码错误邮件提醒 Read More »

MySQL8 创建新用户 改密码

最近新配置了一台新服务器用于生产环境,为了使整个系统生命周期长一些,我在配置环境时候安装的都是最新版的稳定系统/软件,比如操作系统选的Debian10, PHP和MySQL选的都是版本8。在安装MySQL时候遇到了之前类似的问题,就是默认root用户不知为何在预配置阶段密码设置无效,在安装后经过测试是空密码。我之前在5.7时候由于遇到过root账户不能远程登录的问题,当时记录了一些解决方法,可是其中的某些步骤提示语法错误,经过查询得知在MySQL8之后之前设置密码的语法已经被淘汰了,现在给空root账户设置密码步骤如下: 首先通过如下命令用root用户名和空密码登录数据库: sudo mysql -u root 然后通过下边命令给root账户修改密码: use mysql; ALTER USER ‘root’@’localhost’ IDENTIFIED WITH caching_sha2_password BY ‘yourpasswd’; flush privileges; exit; 命令成功执行后可以查看一下是否可以用新密码登陆: sudo mysql -u root -p 理论上现在已经可以通过sudo结合root用户名和密码在BASH里边登录数据库了。当时此时root账户可能不能通过phpMyAdmin或者外部工具登录(修正:这是由于root 用户使用 unix_socket 身份验证插件,只有在以系统 root 身份调用 mysql 命令或将 sudo 添加到命令时,才能以 root 身份连接到数据库,如果验证插件是其他比如我现在的Caching sha2 authentication,也是可以在phpmyadmin使用root登录的),这是从MySQL 5.7开始的安全策略原因,详细介绍以及解决方案可以看刚刚提到的那篇博文记录。 另外 Debian 10 的默认软件源中并不包含 MySQL 软件包,它已被 MariaDB 替代。我这次安装参考了不少教程,列在这里以表感谢:   Reference: https://blog.shuspieler.com/1090/ https://www.digitalocean.com/community/tutorials/how-to-install-the-latest-mysql-on-debian-10 https://www.jianshu.com/p/59a9bcc136c2

MySQL8 创建新用户 改密码 Read More »