回顾过去的学习历程,吴恩达和李宏毅老师的视频为我的深度学习之路提供了极大的帮助。他们幽默风趣的讲解方式和简单直观的阐述,让枯燥的理论学习变得生动有趣。
然而,在实践的时候,许多学弟学妹们最初会烦恼于怎么去获取国外大模型的 API ,尽管最终都能找到解决方法,但第一次的畏难情绪总是会拖延学习进度,逐渐转变为“看视频就够了”的状态。我时常在评论区看到类似的讨论,于是决定利用闲暇时间帮学子们跨过这道门槛,这也是项目的初衷。
本项目不会提供🪜科学上网的教程,也不会依赖平台自定义的接口,而是使用更兼容的 OpenAI SDK,帮助大家学习更通用的知识。
项目将从简单的 API 调用入手,带你逐步深入大模型的世界。在此过程中,你将掌握 AI 视频摘要、LLM 微调和 AI 图像生成等技能。
强烈建议观看李宏毅老师的课程「生成式人工智能导论」同步学习:课程相关链接快速访问
现在,项目还开设了🎡CodePlayground,你可以按照文档配置好环境,使用一行代码运行脚本,体验 AI 的魅力。
📑论文随笔位于 PaperNotes,将逐步上传大模型相关的基础论文。
🚀 基础镜像已经准备好,如果你还没有配置好属于自己的深度学习环境,不妨尝试一下 Docker。
祝你旅途愉快!
- Tag 说明:
---
: 基础知识,根据需要进行观看,也可以暂时跳过。其中的代码文件结果都会在文章中示出,但仍建议动手运行代码。可能会有显存要求。API
: 文章仅使用大模型的 API,不受设备限制,无 GPU 也可运行。- Kaggle 目前不允许使用 Gradio,故部分交互文件不提供相关链接(这一类文件可以本地运行)。
LLM
: 大型语言模型相关的实践,代码文件可能有显存要求。SD
: Stable Diffusion,文生图相关的实践,代码文件有显存要求。
- Online 在线链接说明:
- 与 Code 内容一致,如果提供了 Kaggle 和 Colab,则三选一运行。
- 如果仅提供了 Colab,说明不受显卡限制可以本地运行,此时不能科学上网的同学可以下载
File
的代码,学习效果一致。 - 运行时请不要忘记打开对应在线平台的 GPU。
- Kaggle:
Setting
->Accelerator
->选择 GPU
。 - Colab:
代码执行程序
->更改运行时类型
->选择 GPU
。
- Kaggle:
Guide | Tag | Describe | File | Online |
---|---|---|---|---|
00. 阿里大模型 API 获取步骤 | API | 将带你一步步的获取 API,如果是第一次注册,需要进行一次身份验证(人脸识别)。 | ||
01. 初识 LLM API:环境配置与多轮对话演示 | API | 这是一段入门的配置和演示,对话代码修改自阿里开发文档。 | Code | Kaggle Colab |
02. 简单入门:通过 API 与 Gradio 构建 AI 应用 | API | 指导如何去使用 Gradio 搭建一个简单的 AI 应用。 | Code | Colab |
03. 进阶指南:自定义 Prompt 提升大模型解题能力 | API | 你将学习自定义一个 Prompt 来提升大模型解数学题的能力,其中一样会提供 Gradio 和非 Gradio 两个版本,并展示代码细节。 | Code | Kaggle Colab |
04. 认识 LoRA:从线性层到注意力机制 | --- | 在正式进入实践之前,你需要知道 LoRA 的基础概念,这篇文章会带你从线性层的 LoRA 实现到注意力机制。 | ||
05. 理解 Hugging Face 的 AutoModel 系列:不同任务的自动模型加载类 |
--- | 我们即将用到的模块是 Hugging Face 中的 AutoModel,这篇文章一样是一个前置知识(当然你可以跳过,等后续产生疑惑时再看)。 | Code | Kaggle Colab |
06. 开始实践:部署你的第一个语言模型 | LLM | 实现非常入门的语言模型部署,项目到现在为止都不会有 GPU 的硬性要求,你可以继续学习。 | Code app_fastapi.py app_flask.py |
|
07. 探究模型参数与显存的关系以及不同精度造成的影响 | --- | 了解模型参数和显存的对应关系并掌握不同精度的导入方式会使得你对模型的选择更加称手。 | ||
08. 尝试微调 LLM:让它会写唐诗 | LLM | 这篇文章与 03. 进阶指南:自定义 Prompt 提升大模型解题能力一样,本质上是专注于“用”而非“写”,你可以像之前一样,对整体的流程有了一个了解,尝试调整超参数部分来查看对微调的影响。 | Code | Kaggle Colab |
09. 深入理解 Beam Search:原理, 示例与代码实现 | --- | 从示例到代码演示,讲解 Beam Search 的数学原理,这应该能解决一些之前阅读的困惑,最终提供一个简单的使用 Hugging Face Transformers 库的示例(如果跳过了之前的文章的话可以尝试它)。 | Code | Kaggle Colab |
10. Top-K vs Top-P:生成式模型中的采样策略与 Temperature 的影响 | --- | 进一步向你展示其他的生成策略。 | Code | Kaggle Colab |
11. DPO 微调示例:根据人类偏好优化 LLM 大语言模型 | LLM | 一个使用 DPO 微调的示例。 | Code | Kaggle Colab |
12. Inseq 特征归因:可视化解释 LLM 的输出 | LLM | 翻译和文本生成(填空)任务的可视化示例。 | Code | Kaggle Colab |
13. 了解人工智能可能存在的偏见 | LLM | 不需要理解代码,可以当作休闲时的一次有趣探索。 | Code | Kaggle Colab |
14. PEFT:在大模型中快速应用 LoRA | --- | 学习如何在导入模型后增加 LoRA 层。 | Code | Kaggle Colab |
15. 用 API 实现 AI 视频摘要:动手制作属于你的 AI 视频助手 | API & LLM | 你将了解到常见的 AI 视频总结小助手背后的原理,并动手实现 AI 视频摘要。 | Code - 完整版 Code - 精简版 🎡脚本 |
Kaggle Colab |
16. 用 LoRA 微调 Stable Diffusion:拆开炼丹炉,动手实现你的第一次 AI 绘画 | SD | 使用 LoRA 进行文生图模型的微调,现在你也能够为别人提供属于你的 LoRA 文件。 | Code Code - 精简版 |
Kaggle Colab |
17. 浅谈 RTN 模型量化:非对称 vs 对称.md | --- | 更进一步地了解 RTN 模型量化的行为,文章以 INT8 为例进行讲解。 | Code | Kaggle Colab |
18. 模型量化技术概述及 GGUF/GGML 文件格式解析 | --- | 这是一个概述文章,或许可以解决一些你在使用 GGUF/GGML 时的疑惑。 | ||
19a. 从加载到对话:使用 Transformers 本地运行量化 LLM 大模型(GPTQ & AWQ) 19b. 从加载到对话:使用 Llama-cpp-python 本地运行量化 LLM 大模型(GGUF) |
LLM | 你将在自己的电脑上部署一个拥有 70 亿(7B)参数的量化模型,注意,这篇文章没有显卡要求。 19 a 使用 Transformers,涉及 GPTQ 和 AWQ 格式的模型加载。 19 b 使用 Llama-cpp-python,涉及 GGUF 格式的模型加载。 另外,你还将完成本地的大模型对话交互功能。 |
Code - Transformers Code - Llama-cpp-python 🎡脚本 |
|
20. RAG 入门实践:从文档拆分到向量数据库与问答构建 | LLM | RAG 的相关实践。 了解文本分块的递归工作原理。 |
Code | |
21. BPE vs WordPiece:理解 Tokenizer 的工作原理与子词分割方法 | --- | Tokenizer 的基本操作。 了解常见的子词分割方法:BPE 和 WordPiece。 了解注意力掩码(Attention Mask)和词元类型 ID (Token Type IDs)。 |
Code | Kaggle Colab |
22. 作业 - Bert 微调抽取式问答 | 这是一个使用 BERT 微调下游问答任务的作业,你可以尝试它并尝试加入 Kaggle 的"比赛",一周后会给出所有提示相关的引导文章,可以选择现在进行学习也可以留待以后。 引导文章不会覆盖作业表述,到时候会上传两版代码以供学习,所以不用担心。 这里不会存在 Deadline。 |
Code - 作业 | Kaggle Colab |
Tip
如果你更喜欢拉取仓库到本地进行阅读 .md
,那么在出现公式报错的时候,请使用 Ctrl+F
或者 Command+F
,搜索\\_
并全部替换为\_
。
拓展阅读:
Guide | Describe |
---|---|
a. 使用 HFD 加快 Hugging Face 模型和数据集的下载 | 如果你觉得模型下载实在是太慢了,可以参考这篇文章进行配置。 遇到代理相关的 443 错误,也可以试着查看这篇文章。 |
b. 命令行基础指令速查(Linux/Mac适用) | 一份命令行的指令速查,基本包含当前仓库的涉及的所有指令,在感到疑惑时去查看它。 |
c. 一些问题的解决方法 | 这里会解决一些项目运行过程中可能遇到的问题。 - 如何拉取远程仓库覆盖本地的一切修改? - 怎么查看和删除 Hugging Face 下载的文件,怎么修改保存路径? |
d. 如何加载 GGUF 模型(分片/Shared/Split/00001-of-0000...的解决方法) | - 了解 Transformers 关于 GGUF 的新特性。 - 使用 Transformers/Llama-cpp-python/Ollama 加载 GGUF 格式的模型文件。 - 学会合并分片的 GGUF 文件。 - 解决 LLama-cpp-python 无法 offload 的问题。 |
e. 数据增强:torchvision.transforms 常用方法解析 | - 了解常用的图像数据增强方法。 Code | Kaggle | Colab |
f. 交叉熵损失函数 nn.CrossEntropyLoss() 详解和要点提醒(PyTorch) | - 了解交叉熵损失的数学原理及 PyTorch 实现。 - 了解初次使用时需要注意的地方。 |
g. 嵌入层 nn.Embedding() 详解和要点提醒(PyTorch) | - 了解嵌入层和词嵌入的概念。 - 使用预训练模型可视化 Embedding。 Code | Kaggle | Colab |
h. 使用 Docker 快速配置深度学习环境(Linux) h. Docker 基础命令介绍和常见报错解决 |
- 使用两行命令配置好深度学习环境 - Docker 基础命令介绍 - 解决使用时的三个常见报错 |
文件夹解释:
-
Demos
所有的代码文件都将存放在其中。
-
data
存放代码中可能用到的小型数据,不需要关注这个文件夹。
-
-
GenAI_PDF
这里是【生成式人工智能导论】课程的作业PDF文件,我上传了它们,因为其最初保存在 Google Drive 中。
-
Guide
所有的指导文件都将存放在其中。
-
assets
这里是 .md 文件用到的图片,不需要关注这个文件夹。
-
-
PaperNotes
论文随笔。
-
README.md
- 目录索引。
-
对比学习论文随笔 1:正负样本
- 涉及使用正负样本思想且优化目标一致的基础论文
- Transformer 论文精读
-
BERT 论文精读
- 预训练任务 MLM 和 NSP
- BERT 模型的输入和输出,以及一些与 Transformer 不同的地方
- 以
$\text{BERT}_\text{BASE}$ 为例,计算模型的总参数量 - 作业 - BERT 微调抽取式问答
-
README.md
生成式人工智能导论学习资源
中文镜像版的制作与分享已经获得李宏毅老师的授权,感谢老师对于知识的无私分享!
- HW1,2不涉及代码相关知识,你可以通过访问对应的作业PDF来了解其中的内容:HW1 | HW2。
- HW3: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | 作业PDF
- HW4: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW5: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW6: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW7: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW8: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW9: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
- HW10: 引导文章 | 代码中文镜像 | 中文 Colab | 英文 Colab | Kaggle | 作业PDF
P.S. 中文镜像将完全实现作业代码的所有功能(本地运行),Kaggle 是国内可直连的在线平台,中文 Colab 和 Kaggle 内容一致,英文 Colab 链接对应于原作业,选择其中一个完成学习即可。
根据实际需求,从下方选择一种方式来准备学习环境,点击 ►
或文字展开。
如果倾向于使用在线平台学习,或者受到显卡性能的限制,可以选择以下平台:
-
Kaggle(国内直连,推荐):阅读文章《Kaggle:免费 GPU 使用指南,Colab 的理想替代方案》进行了解。
-
Colab(需要🪜科学上网)
项目中的代码文件在两个平台是同步的。
安装基础软件
- Git:用于克隆代码仓库。
- Wget 和 Curl:用于下载脚本和文件。
- Conda:用于创建和管理虚拟环境。
- pip:用于安装 Python 依赖包。
-
Linux (Ubuntu):
sudo apt-get update sudo apt-get install git
-
macOS:
-
先安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
然后运行:
brew install git
-
-
Windows:
从 Git for Windows 下载并安装。
-
Linux (Ubuntu):
sudo apt-get update sudo apt-get install wget curl
-
macOS:
brew install wget curl
-
Windows:
从 Wget for Windows 和 Curl 官方网站 下载并安装。
访问 Anaconda 官方网站,输入邮箱地址后检查邮箱,你应该能看到:
点击 Download Now
,选择合适的版本并下载(Anaconda 和 Miniconda 都可以):
-
Linux (Ubuntu):
-
安装 Anaconda
访问 repo.anaconda.com 进行版本选择。
# 下载 Anaconda 安装脚本(以最新版本为例) wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh # 运行安装脚本 bash Anaconda3-2024.10-1-Linux-x86_64.sh # 按照提示完成安装(先回车,空格一直翻页,翻到最后输入 yes,回车) # 安装完成后,刷新环境变量或者重新打开终端 source ~/.bashrc
-
安装 Miniconda(推荐)
访问 repo.anaconda.com/miniconda 进行版本选择。Miniconda 是一个精简版的 Anaconda,只包含 Conda 和 Python。
# 下载 Miniconda 安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 运行安装脚本 bash Miniconda3-latest-Linux-x86_64.sh # 按照提示完成安装(先回车,空格一直翻页,翻到最后输入 yes,回车) # 安装完成后,刷新环境变量或者重新打开终端 source ~/.bashrc
-
-
macOS:
对应替换 Linux 命令中的网址。
-
安装 Anaconda
访问 repo.anaconda.com 进行版本选择。
-
安装 Miniconda(推荐)
访问 repo.anaconda.com/miniconda 进行版本选择。
-
在终端中输入以下命令,如果显示版本信息,则说明安装成功。
conda --version
cat <<'EOF' > ~/.condarc
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirror.nju.edu.cn/anaconda/pkgs/main
- https://mirror.nju.edu.cn/anaconda/pkgs/r
- https://mirror.nju.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirror.nju.edu.cn/anaconda/cloud
pytorch: https://mirror.nju.edu.cn/anaconda/cloud
EOF
[!note]
很多去年可用的镜像源已经不可用,目前其余镜像站配置可以参考南大这个非常 nice 的文档:镜像使用帮助。
注意:如果已经安装了 Anaconda 或 Miniconda,系统中会包含 pip
,无需额外安装。
-
Linux (Ubuntu):
sudo apt-get update sudo apt-get install python3-pip
-
macOS:
brew install python3
-
Windows:
-
下载并安装 Python,确保勾选“Add Python to PATH”选项。
-
打开命令提示符,输入:
python -m ensurepip --upgrade
-
在终端中输入以下命令,如果显示版本信息,则说明安装成功。
pip --version
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
通过以下命令拉取项目:
git clone https://github.com/Hoper-J/AI-Guide-and-Demos-zh_CN.git
cd AI-Guide-and-Demos-zh_CN
版本不限制,可以更高:
conda create -n aigc python=3.9
按y
回车以继续,等创建完成后,激活虚拟环境:
conda activate aigc
接下来需要进行基础的依赖安装,参考 PyTorch 官网,以 CUDA 11.8 为例(如果显卡不支持11.8,需要更换命令),二选一进行安装:
# pip
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# conda
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
现在我们成功配置好了所有需要的环境,准备开始学习 :) 其余依赖在每个文章中会单独列出。
[!note]
Docker 镜像已经预装了依赖,不用重新安装。
先安装 jupyter-lab
,这比 jupyter notebook
好用很多。
pip install jupyterlab
安装完成后,执行下面的命令:
jupyter-lab
现在你将可以通过弹出的链接进行访问,一般位于 8888 端口。对于图形化界面,Windows/Linux 摁住 Ctrl
,mac 按住 Command
,然后点击链接可以直接跳转。至此,你将获得项目的全貌:
没有安装 Docker 的同学可以阅读文章《使用 Docker 快速配置深度学习环境(Linux)》,建议初学者阅读《Docker 基础命令介绍和常见报错解决》。
所有版本都预装了 sudo
、pip
、conda
、wget
、curl
和 vim
等常用工具,且已经配置好 pip
和 conda
的国内镜像源。同时,集成了 zsh
和一些实用的命令行插件(命令自动补全、语法高亮、以及目录跳转工具 z
)。此外,已预装 jupyter notebook
和 jupyter lab
,设置了其中的默认终端为 zsh
,方便进行深度学习开发,并优化了容器内的中文显示,避免出现乱码问题。其中还预配置了 Hugging Face 的国内镜像地址。
- base 版本基于
pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel
,默认python
版本为 3.11.10,可以通过conda install python==版本号
直接修改版本。 - dl 版本在 base 基础上,额外安装了深度学习框架和常用工具,具体查看安装清单。
base
**基础环境**:- python 3.11.10
- torch 2.5.1 + cuda 11.8 + cudnn 9
Apt 安装:
wget
、curl
:命令行下载工具vim
、nano
:文本编辑器git
:版本控制工具git-lfs
:Git LFS(大文件存储)zip
、unzip
:文件压缩和解压工具htop
:系统监控工具tmux
、screen
:会话管理工具build-essential
:编译工具(如gcc
、g++
)iputils-ping
、iproute2
、net-tools
:网络工具(提供ping
、ip
、ifconfig
、netstat
等命令)ssh
:远程连接工具rsync
:文件同步工具tree
:显示文件和目录树lsof
:查看当前系统打开的文件aria2
:多线程下载工具libssl-dev
:OpenSSL 开发库
pip 安装:
jupyter notebook
、jupyter lab
:交互式开发环境virtualenv
:Python 虚拟环境管理工具,可以直接用 condatensorboard
:深度学习训练可视化工具ipywidgets
:Jupyter 小部件库,用以正确显示进度条
插件:
zsh-autosuggestions
:命令自动补全zsh-syntax-highlighting
:语法高亮z
:快速跳转目录
dl
dl(Deep Learning)版本在 base 基础上,额外安装了深度学习可能用到的基础工具和库:
Apt 安装:
ffmpeg
:音视频处理工具libgl1-mesa-glx
:图形库依赖(解决一些深度学习框架图形相关问题)
pip 安装:
- 数据科学库:
numpy
、scipy
:数值计算和科学计算pandas
:数据分析matplotlib
、seaborn
:数据可视化scikit-learn
:机器学习工具
- 深度学习框架:
tensorflow
、tensorflow-addons
:另一种流行的深度学习框架tf-keras
:Keras 接口的 TensorFlow 实现
- NLP 相关库:
transformers
、datasets
:Hugging Face 提供的 NLP 工具nltk
、spacy
:自然语言处理工具
如果需要额外的库,可以通过以下命令手动安装:
pip install --timeout 120 <替换成库名>
这里 --timeout 120
设置了 120 秒的超时时间,确保在网络不佳的情况下仍然有足够的时间进行安装。如果不进行设置,在国内的环境下可能会遇到安装包因下载超时而失败的情况。
注意,所有镜像都不会提前拉取仓库。
假设你已经安装并配置好了 Docker,那么只需两行命令即可完成深度学习的环境配置,对于当前项目,你可以查看完版本说明后进行选择,二者对应的 image_name:tag
如下:
- base:
hoperj/quickstart:base-torch2.5.1-cuda11.8-cudnn9-devel
- dl:
hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
拉取命令为:
docker pull <image_name:tag>
下面以 dl 版为例进行命令演示,选择其中一种方式完成。
docker pull dockerpull.org/hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
docker pull hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel
可以通过百度云盘下载文件(阿里云盘不支持分享大的压缩文件)。
同名文件内容相同,
.tar.gz
为压缩版本,下载后通过以下命令解压:gzip -d dl.tar.gz
假设 dl.tar
被下载到了 ~/Downloads
中,那么切换至对应目录:
cd ~/Downloads
然后加载镜像:
docker load -i dl.tar
此模式下,容器会直接使用主机的网络配置,所有端口都等同于主机的端口,无需单独映射。如果只需映射指定端口,将
--network host
替换为-p port:port
。
docker run --gpus all -it --name ai --network host hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel /bin/zsh
对于需要使用代理的同学,增加 -e
来设置环境变量,也可以参考拓展文章a:
假设代理的 HTTP/HTTPS 端口号为 7890, SOCKS5 为 7891:
-e http_proxy=http://127.0.0.1:7890
-e https_proxy=http://127.0.0.1:7890
-e all_proxy=socks5://127.0.0.1:7891
融入到之前的命令中:
docker run --gpus all -it \
--name ai \
--network host \
-e http_proxy=http://127.0.0.1:7890 \
-e https_proxy=http://127.0.0.1:7890 \
-e all_proxy=socks5://127.0.0.1:7891 \
hoperj/quickstart:dl-torch2.5.1-cuda11.8-cudnn9-devel \
/bin/zsh
[!tip]
常用操作提前看:
- 启动容器:
docker start <容器名>
- 运行容器:
docker exec -it <容器名> /bin/zsh
- 容器内退出:
Ctrl + D
或exit
。- 停止容器:
docker stop <容器名>
- 删除容器:
docker rm <容器名>
git clone https://github.com/Hoper-J/AI-Guide-and-Demos-zh_CN.git
cd AI-Guide-and-Demos-zh_CN
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root
对于图形化界面,Windows/Linux 摁住 Ctrl
,mac 按住 Command
,然后点击链接可以直接跳转。
- 完全复现「生成式人工智能导论」的代码以供学习
- 将其中的行为使用 OpenAI 库进行替换
- 使用 ipywidgets 模拟 Colab 的交互
- 以中文进行作业引导
- 大模型基础论文
- Transformer
- -> GPT -> Bert
- nn.Embedding
- 上传并测试在线平台代码的可运行性
- Bert 微调下游任务:抽取式问答 (Extractive Question Answering)
- 提供一个中文版本的基础微调代码以供学习
- 引导文章
- Docker 镜像制作和引导文章撰写
- 基础版本
- 深度学习版本
- LoRA 文生图的 🎡 命令行脚本制作上传
- 补充 Docker 基础命令(推迟)
- 更多有趣的实践项目与理论...
感谢你的STAR🌟,希望这一切对你有所帮助。