0%

人工智能科学研究的工具基础

前言

AI 领域的科研近几年呈现井喷式的增长,相比于理科/传统工科,AI 领域的科研不需要太多太深的基础知识,且不需要庞大的 Team 就能做出些成果。经常有朋友问我科研入门都需要掌握哪些知识,正逢近日师兄希望完善一下培养新人的 doc,我也打算另开一篇 blog 记录下做研究需要补充的基础知识。

总的来说,做 AI Research 大约需要的基础有这些:数学基础,AI基础,编程基础,工具基础,英语基础。本文的重点是工具基础这部分。顺带说一下其他部分:

数学基础高数、概率论、CSAI。因方向而异,除去理论机器学习、大模型机理等理论性较强的方向,需要的基础其实并不多,能看懂 paper 中的公式推导即可,比如 VAE, Diffusion 原始 paper 中的推导。另外,一些其他的数学知识也是必要的,比如 PAC/SVD/插值法等等,这就体现出 CSAI 这门课的作用了。至于复变,除了傅里叶变换在传统的信号处理中常用之外,其他的貌似没有什么太大作用(当然可能是笔者水平不够,所看的 paper 没有用过这些)。

AI基础深度学习+方向相关的基础知识。深度学习可以参考 CS231N 这门课(+作业)。著名的喵喵学长多次讲过,传统的机器学习算法似乎对科研帮助并不大,这点我还是很赞同的,因此不必按照课程设置把机器学习、AI概论等等课学完再去学 Deep Learning,直接学 DL 完全没有问题,有问题请教 AI 即可。此外,根据研究方向的不同,所需的基础知识也有差异,比如 Robot Learning 就需要额外学一些 Robotics 和 3D Vision 的基础知识。

编程基础Python, Pytorch。Python 编程和 Pytorch 的使用同样重要,这部分内容可以搜一些现有的教程,如李沐在B站上的视频,等等。完成标准是可以手写一个 Transformer 之类的较大的 Project (或者手动实现一下 nn.MultiheadAttention)。算法知识其实并不太必要(笔者算法水平很菜呜),重要的是能看明白程序是怎么运行的,参数是怎么调用的,当我需要修改某个模块的时候代码应该怎么改(这才是最实用的技能)。另外,学会和 Cursor/Copilot 一起工作也很重要,特别是发现他们的错误。

英语基础不能太差就行,比如六级 550+ 这样。一开始看 paper 肯定是看不太懂的,于是查词典,看了几篇之后专业词汇都懂了之后便能做到独立看 paper, 且阅读速度并不会比中文慢多少。

下面进入正题,详细介绍一下工具基础。

Linux 服务器

大部分的深度学习训练应该是在课题组的服务器/租用的服务器上完成的,因此需要掌握如何使用组内的服务器。

首先,服务器可以理解为是操作系统为 Linux 且性能极强(无论是GPU 还是 CPU)的一台电脑。所以需要先学习一下 Linux 系统的基本知识。Linux 系统的内容十分丰富,笔者只列与 AI Rsearch 密切相关的几点。

1. 文件系统

  • 文件复制

    1
    cp /home/nailong/jitui.txt /home/baobaolong/

    表示将 jitui.txt 文件复制到 /home/baobaolong/ 目录下。复制整个文件夹需加 -r 参数:

    1
    cp -r /home/nailong/project /home/baobaolong/
  • 文件移动(剪切)
    1
    2
    mv jitui.txt /home/baobaolong/
    mv old_name.txt new_name.txt # 也可以用于重命名
  • 文件删除
    1
    2
    3
    4
    5
    6
    # 删除单个文件:
    rm jitui.txt
    # 删除文件夹及其所有内容:
    rm -r folder_name/
    # 强制删除(不提示):
    rm -rf folder_name/
    警告:rm -rf 命令非常危险,误用可能导致系统崩溃,务必小心。

2. 权限管理与运行程序

3. 视监你的机器:nvidia-smi 和 htop

nvidia-smi 和 watch -n 0.1 nvidia-smi

这个命令用来查看模型训练的 GPU 使用情况,如果希望动态查看,可以使用 watch -n 0.1 nvidia-smi (0.1 是我设置的刷新时间间隔)。这里以笔者的输出举例,分析怎么看这里面的数据。
alt text

左边表示从 0 到 7 是 8 张 NVIDIA 4090 显卡,说明这是一台八卡 4090 服务器。

最左边是风扇和温度,反映了这张卡近一段时间的工作强度,中间是目前的显存占用,右边是目前的 GPU 利用率。一般而言,良好的训练状态下 GPU 利用率应该在 70% 以上波动,最好能一直 80% 以上。如果 GPU 利用率不高(经常三四十,甚至 0% )则要考虑是不是数据预处理太慢,CPU 和 GPU 速度不同步导致 GPU 空闲,这时可以试图增加数据预处理模块,或者提高 num_workers 到 8 或者 16,都可能解决这个问题。

显存的占用和 batch_size 与模型的大小都有关,一般而言,在模型大小固定的情况下,根据显卡的显存总量,尽量提高 batch_size 有助于稳定训练和提高效果。

htop 和 top

这两个命令是监控 CPU 状态的,区别是 htop 比较新,top 是个很老的命令了。
alt text
同样以一台服务器为例(摄像时机器正处空闲时段,没有跑什么训练或测试任务)展示 htop 的输出,通过这个输出,我们很方便判断系统此时的负载,有没有哪个线程卡死之类的问题。比如发现训练缓慢,可以通过查询 STATE 判断是否有卡 I/O 的情况。具体的细节,一位台湾的工程师写过 blog 详细讲解怎么看 htop 面板,很实用。

bash
复制
编辑
ls -l
输出示例:

csharp
复制
编辑
-rw-r—r— 1 user group 1234 Jul 22 12:00 jitui.txt
修改权限

bash
复制
编辑
chmod +x script.sh # 增加执行权限
运行程序

运行 Python 脚本:

bash
复制
编辑
python script.py
运行 Shell 脚本(先确保可执行):

bash
复制
编辑
chmod +x run.sh
./run.sh

  1. 包管理与环境配置(基础)
    使用 pip 安装库

bash
复制
编辑
pip install numpy
使用 conda 创建虚拟环境

bash
复制
编辑
conda create -n myenv python=3.10
conda activate myenv
查看当前已安装的包

bash
复制
编辑
pip list

  1. GPU 与进程管理(简要)
    查看 GPU 使用情况(NVIDIA 显卡)

bash
复制
编辑
nvidia-smi
查看进程状态

bash
复制
编辑
top
推荐工具:htop

bash
复制
编辑
sudo apt install htop
htop
杀死进程

bash
复制
编辑
kill
kill -9 # 强制杀死

  1. 远程连接与文件传输
    通过 SSH 连接远程服务器

bash
复制
编辑
ssh username@server_ip
从本地复制文件到服务器

bash
复制
编辑
scp localfile.txt username@server_ip:/home/username/
从服务器复制文件到本地

bash
复制
编辑
scp username@server_ip:/home/username/file.txt .
如需继续阅读 Git 基础、Shell 脚本、远程开发 VSCode 配置、Docker 使用等内容,请阅读下一节。

go
复制
编辑

如你需要我输出为 .md 文件或继续补充后续章节(如 Git、Docker、调试工具等),可以随时告诉我。

需要注意的两点:组内服务器常为共用,一般需建一个以自己名字命名的文件夹存储自己的代码。并且更为重要的是,服务器通常将代码和数据分开存储,数据存储在数据盘以加快读写速度,必须把自己训练的数据放在数据盘(否则可能导致系统盘爆满影响他人使用,笔者一开始不知道就放错了哈哈)。