1. 从零搭建一台远程 AI 工作站,我踩过的坑比想象中多
很多人第一次听到“Bash”这个词,表情跟听到某种外语差不多——知道它大概跟电脑有关,但具体是什么、能干什么、跟自己有什么关系,完全没概念。我一开始也是这样。事情的起因很简单:手头有一台闲置的小主机,配置不算差,想着能不能把它变成一台随时可以远程连上去跑 AI 任务的机器。听起来是个挺酷的想法,但真正动手之后才发现,从“不知道 Bash 是什么”到“远程 AI 工作站跑起来”,中间隔着的不是一步两步,而是一连串让人抓狂的坑。
这篇文章想做的事情很直接:把整个过程完整地复盘一遍。包括为什么选 Ubuntu 而不是别的系统、Bash 到底在整件事里扮演什么角色、远程连接方案怎么选、AI 运行环境怎么配、遇到问题怎么排查。适合那些手里有闲置硬件、想折腾一台自己的远程工作站、但对 Linux 和命令行不太熟悉的朋友。我会尽量用大白话把每个环节讲清楚,该给命令给命令,该解释原理就解释原理,争取让你看完之后能直接照着做,少走我走过的弯路。
整件事的核心其实就三个关键词:Ubuntu 小主机、远程连接、AI 工作站。把这三点串起来,就是一台放在角落里、不用接显示器键盘、随时能通过网络连上去跑模型和写代码的机器。听起来不复杂,但每一个环节都有它的门道。
2. 为什么是 Ubuntu 小主机,而不是别的方案
2.1 硬件选型的现实考量
先说硬件。我用的是一台迷你主机,体积大概跟一本书差不多,功耗低、噪音小,适合长时间开着。这类小主机通常有几种配置路线:一种是低功耗处理器配集成显卡,适合做轻量级服务;另一种是带独立显卡或者性能更强的核显,能跑一些中等规模的模型推理。我选的是后者,原因很实际——既然要做 AI 工作站,总得能跑得动东西,不然远程连上去只能看看终端,那意义不大。
这里有个很多人会忽略的点:内存和存储的选择比 CPU 更影响体验。AI 相关的任务,不管是跑推理还是做数据处理,内存不够会直接导致进程被杀掉,而存储速度则影响模型加载的时间。我的建议是内存至少 16GB 起步,如果预算允许上到 32GB 甚至 64GB,后面你会感谢自己。存储方面,固态硬盘是必须的,机械硬盘加载大模型的时间能让你怀疑人生。
提示:买小主机之前先想清楚你要跑什么。如果只是跑一些轻量级的推理任务,中端配置就够了;如果要跑更大的模型或者做训练,那硬件预算要重新算。
2.2 为什么选 Ubuntu 而不是其他系统
操作系统这块,我几乎没怎么犹豫就选了 Ubuntu。原因有几个:第一,AI 生态对 Linux 的支持是最好的,很多工具和框架在 Linux 上装起来最省事;第二,Ubuntu 的社区资源丰富,遇到问题搜索一下基本都能找到答案;第三,它的长期支持版本稳定,适合做长期运行的工作站。
有人可能会问,为什么不直接用 Windows?说实话,Windows 也能跑 AI 任务,但你会遇到更多环境配置上的麻烦,尤其是涉及到一些底层依赖的时候。而且远程管理方面,Linux 的方案更成熟、更轻量。至于其他 Linux 发行版,比如 Fedora 或者 Arch,它们各有优势,但对新手来说,Ubuntu 的资料最多、踩坑成本最低。
安装 Ubuntu 的过程本身不复杂,用启动盘引导安装就行。但有几个细节值得注意:安装时建议勾选“安装第三方软件”,这样一些驱动和编解码器会自动装好;分区的时候如果打算长期用,建议给根目录留足够空间,别到时候因为磁盘满了导致系统出问题。
2.3 Bash 到底是什么,为什么绕不开它
回到那个最初的问题:Bash 是什么?简单说,它是 Linux 系统上的一个命令行解释器,你输入命令,它负责解释并执行。你可以把它想象成一个翻译官,你说人话(命令),它翻译给系统听,系统执行完再把结果告诉它,它再转述给你。
为什么绕不开它?因为 Linux 系统的绝大多数操作,最终都可以通过命令行完成。而且很多 AI 工具和框架的安装、配置、运行,官方文档给的都是命令行指令。你不需要成为 Bash 高手,但至少得能看懂基本的命令,知道怎么安装软件、怎么切换目录、怎么查看文件内容、怎么运行脚本。这些是基础中的基础。
我一开始对 Bash 完全没概念,看到终端里那个闪烁的光标就发怵。但实际用下来发现,常用的命令就那么十几个,用多了自然就记住了。而且一旦你习惯了命令行的效率,再回到图形界面点来点去反而会觉得慢。
3. 远程连接方案怎么选,我试了三种才找到合适的
3.1 远程连接的核心需求分析
一台放在角落里的主机,不接显示器不接键盘,怎么用?答案就是远程连接。但远程连接有好几种方案,每种适合的场景不一样。我在选方案之前,先把自己的需求列了一下:第一,要能远程操作终端,因为大部分 AI 任务都是在命令行里跑的;第二,最好能远程看到桌面,偶尔需要图形界面操作;第三,连接要稳定,不能动不动就断;第四,安全性要过得去,毕竟是暴露在网络上的机器。
这四个需求看起来简单,但真正选方案的时候会发现,不同的工具在這些维度上各有取舍。有的终端连接很流畅但图形界面支持一般,有的图形界面体验好但资源占用高,有的配置简单但安全性需要额外注意。
3.2 三种远程连接方案的实测对比
我前后试了三种方案,分别是基于 SSH 的终端连接、基于远程桌面协议的图形连接,以及基于 Web 的远程管理面板。下面这张表是我实际使用后的对比:
| 方案类型 | 终端体验 | 图形界面 | 资源占用 | 配置难度 | 适用场景 |
|---|---|---|---|---|---|
| SSH 终端 | 极好 | 不支持 | 极低 | 低 | 纯命令行任务 |
| 远程桌面协议 | 一般 | 好 | 中等 | 中等 | 需要图形界面 |
| Web 管理面板 | 一般 | 一般 | 较高 | 低 | 简单管理 |
SSH 是我用得最多的方案。它的优势太明显了:轻量、稳定、安全。你只需要在主机上开启 SSH 服务,然后在另一台电脑上用终端工具连上去就行。所有的 AI 任务都可以在 SSH 会话里跑,包括启动训练脚本、查看日志、管理进程。而且 SSH 支持端口转发,可以把远程主机上的服务映射到本地,非常灵活。
远程桌面协议适合需要图形界面的场景,比如你想远程看看浏览器、用用图形化的开发工具。但它的资源占用比 SSH 高不少,而且网络不好的时候体验会明显下降。我的做法是平时用 SSH,需要图形界面的时候再开远程桌面。
Web 管理面板适合做一些简单的管理操作,比如查看系统状态、重启服务、管理文件。它的好处是不需要安装客户端,浏览器打开就能用。但功能相对有限,而且安全性需要额外注意,不建议直接暴露在公网上。
注意:不管用哪种远程方案,安全配置都不能省。至少要做到禁用密码登录、只用密钥认证、修改默认端口、配置防火墙规则。这几步花不了多少时间,但能挡掉绝大部分自动化扫描和攻击。
3.3 SSH 连接的具体配置步骤
SSH 的配置其实不复杂,但有几个关键步骤不能漏。首先是在 Ubuntu 主机上安装 SSH 服务,这个一般安装系统的时候勾选了就有,没有的话手动装一下就行。然后是在客户端生成密钥对,把公钥传到主机上。接着修改 SSH 配置文件,禁用密码登录、禁用 root 直接登录、修改默认端口。最后重启 SSH 服务,测试连接。
这里有个细节值得说一下:修改默认端口的意义。很多人觉得改端口没什么用,因为端口扫描总能扫到。但实际上,改端口能挡掉大量无差别扫描的机器人,它们通常只扫默认端口。这就像你把家门从大路旁边挪到小巷子里,虽然不能阻止有心人找到,但能过滤掉大部分路过的。
另一个细节是密钥认证的配置。生成密钥对的时候,建议用 ed25519 算法,它比 RSA 更短、更安全。公钥传到主机上的时候,注意权限设置,.ssh 目录应该是 700,authorized_keys 文件应该是 600,权限不对的话 SSH 会拒绝使用密钥。
4. AI 运行环境搭建,这些坑我替你踩过了
4.1 基础依赖的安装与配置
远程连接搞定之后,下一步就是搭建 AI 运行环境。这一步是整个过程中最耗时间的,因为涉及的依赖多、版本兼容性复杂。我的建议是先装基础依赖,再装框架,最后装具体的工具库,一层一层来,出问题了容易定位。
基础依赖包括编译工具、Python 环境、包管理器这些。Ubuntu 上安装这些东西不算麻烦,但有几个点要注意:Python 版本的选择很关键,太新或者太旧都可能导致某些库装不上。我的经验是选一个主流版本,比如 3.10 或者 3.11,兼容性最好。另外,强烈建议用虚拟环境来管理 Python 包,不要直接装在系统 Python 里,不然以后版本冲突会让你很头疼。
虚拟环境的好处是隔离。你可以为每个项目创建独立的环境,装不同的包版本,互不影响。创建虚拟环境的命令很简单,但记得每次操作前先激活它,不然你装的包可能跑到系统环境里去了。
4.2 显卡驱动与计算框架的适配
如果主机有独立显卡,这一步是绕不过去的。显卡驱动的安装方式有几种,我试过手动安装和包管理器安装,最后发现用包管理器最省心。手动安装虽然能控制版本,但每次系统更新内核之后可能要重装,比较麻烦。
驱动装好之后,还要装对应的计算框架。这里最大的坑是版本匹配。驱动版本、框架版本、Python 版本,三者之间必须兼容,不然会出现各种奇怪的错误。我的做法是先去框架的官方文档查兼容性表格,确定好版本组合再动手装,不要凭感觉装最新版。
提示:装完驱动之后,用官方提供的命令验证一下是否正常工作。如果验证不通过,先别急着装框架,把驱动问题解决了再说。驱动有问题的话,后面装什么都是白搭。
4.3 常用 AI 工具的部署与验证
环境搭好之后,可以装一些常用的 AI 工具了。这部分看个人需求,有人需要推理框架,有人需要数据处理库,有人需要开发工具。我的建议是按需安装,不要一次装太多。装得越多,依赖冲突的概率越大,而且很多工具你其实用不上。
每装完一个工具,最好都验证一下能不能正常导入、能不能跑一个简单的示例。这样出问题的时候你知道是哪个环节的事。如果装了一堆再一起测试,报错了你都不知道从哪查起。
验证的时候有个小技巧:先用最简单的功能测试,比如导入库、打印版本号、跑一个官方提供的最小示例。这些通过了,再跑你自己的任务。不要一上来就跑复杂的东西,那样出错了很难判断是环境问题还是代码问题。
5. 实际使用中遇到的典型问题与排查思路
5.1 远程连接类问题
远程连接最常见的问题是连不上。可能的原因有很多:网络不通、SSH 服务没启动、防火墙挡了、端口改了忘了、密钥权限不对。排查的时候按顺序来:先 ping 一下主机看网络通不通,然后用 telnet 或者 nc 测试端口开没开,再看 SSH 服务的状态,最后检查配置文件和密钥权限。
还有一个问题是连接不稳定,动不动就断。这通常是网络质量的问题,但也可能是 SSH 配置的问题。可以在 SSH 配置里加上心跳保活的设置,让客户端定期发送信号,防止连接被中间设备断开。这个设置很简单,但效果很明显。
5.2 环境配置类问题
环境配置的问题五花八门,但归纳起来无非几种:依赖缺失、版本冲突、权限不足、路径不对。依赖缺失的报错通常很明确,缺什么装什么就行。版本冲突比较麻烦,需要仔细看报错信息,确定是哪个包的哪个版本跟哪个包冲突了,然后调整版本。
权限问题在 Linux 上很常见,尤其是涉及到系统目录和硬件设备的时候。遇到权限报错,先看是哪个文件或目录的权限不对,然后用 chmod 或者 chown 调整。但要注意,不要动不动就用管理员权限跑所有命令,那样会带来安全隐患,而且可能把系统文件搞乱。
路径问题也很常见,尤其是自己编译安装的软件。报错说找不到某个命令或者某个库,通常是环境变量没配好。检查一下 PATH 和 LD_LIBRARY_PATH 这两个变量,看看是不是缺了必要的路径。
5.3 性能与稳定性问题
主机长时间运行之后,可能会遇到性能下降或者服务挂掉的情况。性能下降通常是资源不够用了,用系统监控工具看一下 CPU、内存、磁盘、网络的占用情况,找到瓶颈在哪。内存不够就加内存或者优化程序的内存使用,磁盘满了就清理日志和缓存文件。
服务挂掉的原因比较多,可能是程序本身的 bug,可能是资源耗尽被系统杀了,也可能是依赖的服务出了问题。排查的时候先看日志,系统日志和程序日志都要看。日志里通常会有明确的错误信息,顺着线索查下去一般能找到原因。
注意:建议给关键服务配置自动重启,这样即使挂了也能很快恢复。但自动重启只是治标,找到挂掉的根因才是治本。不要因为配了自动重启就不管了,那样问题会一直存在。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方向 | 解决思路 |
|---|---|---|---|
| 远程连不上 | 网络/服务/防火墙 | 逐层测试 | 按网络到服务的顺序排查 |
| 连接频繁断开 | 网络不稳/配置问题 | 查看日志 | 配置心跳保活 |
| 命令找不到 | 环境变量未配置 | 检查 PATH | 添加正确路径 |
| 依赖报错 | 版本冲突/缺失 | 查看报错详情 | 调整版本或安装缺失包 |
| 权限被拒绝 | 文件权限不对 | 检查权限设置 | 调整 chmod/chown |
| 服务自动停止 | 资源耗尽/程序错误 | 查看系统日志 | 优化资源或修复程序 |
| 磁盘空间不足 | 日志/缓存堆积 | 查看磁盘占用 | 清理无用文件 |
| 显卡不工作 | 驱动问题 | 验证驱动状态 | 重装或更新驱动 |
6. 一些让工作站更好用的小技巧
6.1 自动化脚本的编写
用了一段时间之后,我发现很多操作是重复的,比如启动服务、检查状态、清理日志。这些操作可以写成脚本,一键执行。Bash 脚本就是干这个的,把一系列命令写在一个文件里,加上一些逻辑判断,就能实现自动化。
写脚本的时候有几个建议:第一,加上注释,不然过一段时间你自己都看不懂;第二,加上错误处理,某个命令失败了要能知道;第三,加上日志输出,方便排查问题。脚本不用写得太复杂,能解决实际问题就行。
6.2 远程文件管理的高效方法
在本地和远程主机之间传文件,有很多种方法。小文件可以用 scp 命令,简单直接。大文件或者需要同步的目录,可以用 rsync,它支持增量传输,速度快很多。如果经常需要传文件,可以配置一下 SSH 的配置文件,把常用的连接信息写进去,以后连接就不用每次都输一长串参数了。
还有一个技巧是挂载远程目录到本地,这样你可以像操作本地文件一样操作远程文件。这个方案适合需要频繁编辑远程文件的场景,用起来很方便。但要注意网络稳定性,网络断了挂载会出问题。
6.3 系统监控与维护的日常习惯
工作站跑起来之后,养成定期检查的习惯很重要。看看磁盘空间够不够、内存占用高不高、有没有异常进程、日志里有没有报错。这些检查花不了几分钟,但能提前发现很多问题,避免服务突然挂掉影响使用。
另外,系统更新也要定期做,但不要盲目更新。更新之前先看看更新了什么,重要的安全更新要及时打,但大版本更新要谨慎,可能会引入兼容性问题。我的做法是安全更新及时装,功能更新等一段时间看别人的反馈再决定。
7. 关于这台小主机,我最后想说的
从完全不知道 Bash 是什么,到把这台小主机变成随时可以远程连上去跑 AI 任务的机器,整个过程大概花了我几个周末的时间。中间踩过的坑不少,有些是知识盲区导致的,有些是粗心大意造成的,还有些纯粹是运气不好碰上了奇怪的兼容性问题。但回过头来看,这些坑其实都有规律可循,大部分都可以提前避免。
如果你也在考虑做类似的事情,我的建议是:先把远程连接搞定,再折腾 AI 环境。远程连接是基础,连不上主机后面什么都做不了。AI 环境可以慢慢配,遇到问题一个一个解决,不用着急。另外,做好笔记,把每一步的操作和遇到的问题都记下来,后面出问题了可以对照排查,也能帮到其他遇到同样问题的人。
这台小主机现在跑得很稳,我平时用它跑一些推理任务、做数据处理、写写代码,偶尔也用来做一些实验性的东西。它的存在感很低,放在角落里不占地方,但需要的时候随时能连上去用,这种感觉挺好的。如果你手里也有闲置的硬件,不妨试试把它变成一台远程工作站,过程可能会有点折腾,但结果值得。