Pytorch生态pipeline
文章目录
背景
在 PyTorch 生态中,想要实现从数据准备、模型训练、可视化监控、到最终部署的“一条龙”自动化建模,最核心的思路是避免重复造轮子,用成熟的生态库进行高内聚的搭配。
pytorch生态,参考:https://landscape.pytorch.org/?group=pytorch-ecosystem

上面官网的这张图其实已经很清楚了,其实就是pytorch生态的工具链,分工不同,同一分工内又有工具并列。
本篇博客,主要侧重于挑选一些社区常用的,构成任务建模环路的工具链,来搭配1个常见的流程。
1,工程骨架两大生态:pytorch lightning vs huggingface
经典辩论(pl和hf),在reddit、stackflow,以及huggingface内部论坛上有大量讨论帖子。
1,pytorch lightning(pl)
官方仓库:https://github.com/lightning-ai/pytorch-lightning
官方文档:https://lightning.ai/docs/pytorch/stable/
、
如果建模比作盖楼,Lightning 就是脚手架和自动化工程设备。它不关心你盖的是住宅还是写字楼(无论做 CV、NLP 还是 3D 视觉),它只负责让盖楼的过程自动化。
- 地位:结构化标准 + 训练自动化引擎
- 核心功劳:
- 消灭冗长代码:把原生 PyTorch 繁琐的
optimizer.zero_grad()、loss.backward()、step()、单机多卡DDP初始化等数百行死板代码完全封装。 - 解耦组织代码:强制你将模型架构、训练逻辑(
training_step)、测试逻辑(validation_step)和数据加载(LightningDataModule)分开,写出高度可读、可复用的代码。 - 硬件无缝切换:同一套代码,你只需在初始化时修改一个参数(如
trainer = Trainer(devices=4, accelerator="gpu")),就能在 CPU、单 GPU、多 GPU (DDP)、甚至 TPU 之间无缝切换。
- 消灭冗长代码:把原生 PyTorch 繁琐的
简单来说就是封装,工程的代码和研究的代码要分离,前者不是研究的重点,反而在工程部署细节上花太多时间容易掣肘研究架构。
更简单点来说,就是避免工程方面的coding重复造轮子—— 一个开源的机器学习库,它建立在 PyTorch 之上,旨在帮助研究人员和开发者更加方便地进行深度学习模型的研发。Lightning 的设计理念是将模型训练中的繁琐代码(如设备管理、分布式训练等)与研究代码(模型架构、数据处理等)分离,从而使研究人员可以专注于研究本身,而不是底层的工程细节。
2,huggingface(hf)
官方文档:https://huggingface.co/docs
chat:https://huggingface.co/chat/
官方仓库生态:https://github.com/huggingface
抱抱脸可以说现在做AI的几乎家喻户晓了,
以前是github社区交流频繁,现在AI上来了是个人都能在github社区上分享,
而huggingface则转移成为了另外一个中心社区,更关注AI整体的研究发展。

官方文档(https://huggingface.co/docs)这一块没什么好说的,
1️⃣ 文档入门要熟读,首先是与hf hub的交互,建议是看下面这个python library(虽然CLI也很重要,但是内容上其实右边的CLI的内容是这个python library的子集)

2️⃣ 以实用为主,建议是可以直接阅读一些重要的库文档,先上手;
比如说只是对huggingface生态的trainer感兴趣,想在自己建模中加入的,其中transformer和dataset这两块比较重要,战力绝大多数,其余的核心机器学习库占少数

3️⃣ 其余的一些库就是用到再学
比如说一些底层的硬件优化方面的库,比如说分布式训练之类,lightning当然也有,都是需要再互补;
然后部署的话,看一下gradio就差不多了

4️⃣ 上面的这些库只是文档,其实算不上是逻辑联系紧密的学习资料,要入门现在机器学习火的领域,要学系统性的课,建议是看hf的learn模块,其中有一些course,都是非常不错的权威教程

比较推荐的几个:
LLM肯定是现在搞agent必看的,右边的那个context course其实就是之前的MCP协议

总之有很多
5️⃣AI本身当然也有影响,比如说chat、skill、MCP等,现在hf也有一套体系

huggingface skill可以参考官方仓库:https://github.com/huggingface/skills
如果 Lightning 是工程设备,Hugging Face 就是建材中心 + 精装样板间。它最初统一了 NLP 领域,如今其触角已延伸到音频、计算机视觉、多模态以及大语言模型(LLM)的方方面面。
可以说huggingface才是模型与数据的超级生态
- 地位:现代深度学习的“基础设施与军火库”
- 核心功劳:
- 资源大一统:
transformers库和 HF Hub 统一了全球开源模型的入口。无论你想用 Llama 3、BERT、ViT(视觉)还是 Whisper(语音),调用方法完全一致:from_pretrained()一键下载。 - 全链路闭环:它自己就包含了一套小型的“一条龙”:
datasets(数据处理)transformers(模型结构)PEFT(高效微调如 LoRA)TRL(人类对齐/强化学习)TGI / vLLM(高效推理部署)。 - 弱化底层硬件:它推出的
accelerate库是 Lightning 的强劲对手,用更轻量的方式帮助开发者管理多卡分布式训练。
- 资源大一统:
比如说huggingface的trainer库,用的人就很多,因为有很多工程化的代码都封装下来了,
当然这一优点lightning那边也一样,
只不过更多的人写的需要自己定制化,基本上都是继承huggingface的trainer类,然后再自己改动

3,pl vs hf
类似的讨论有很多:
https://www.zhihu.com/question/521501258/answer/2913099747
我们还是以trainer封装的库为例,
逻辑其实就在于封装程度带来的易用性和灵活性之间的矛盾,基本操作和实现的功能其实是没有太大区别的


两个生态当然都有人用,也有一些第三方的,或者是自己写也行;
折中建议就是两个都用,毕竟互补。
当你需要用 Hugging Face 的模型和数据,但训练逻辑非常复杂(例如:多阶段训练、复杂的对抗生成、非标准损失函数),或者需要严谨的工程控制时:
- 搭配方式:用 Hugging Face 的
datasets加载数据,用transformers加载模型权重,然后把这个模型塞进 PyTorch Lightning 的LightningModule中,利用 Lightning 的Trainer来控制训练和多卡调度。在目前的大语言模型(LLM)微调领域,两者的功能高度重合,通常二选一:
- Hugging Face 路线:直接使用
Transformers.Trainer+DeepSpeed/Accelerate。这是目前 LLM 领域最主流的“一条龙”,不需要 Lightning。- Lightning 路线:使用 Lightning 官方团队专门针对大模型推出的
Lightning Birds (LitGPT)或Lit-LLAMA框架,走纯粹的 Lightning 体系。
4,一个比较经典的模板(lightning+hydra)
pl和hf本身的生态都比较完善了,
另外有一些比较模板化(本身也是为了减少工程coding花费时间)的模板也值得看一下,
比如说:https://github.com/ashleve/lightning-hydra-template

这两个组合其实还挺常用的,

常用到甚至能够在github上找到另外一个同样组合的模板仓库:
https://github.com/gorodnitskiy/yet-another-lightning-hydra-template
整体来说是1个模板框架,Hydra 超参数管理、Lightning 训练逻辑分离、TensorBoard 日志管理、自动保存 best.ckpt,可以很快开启一个模型项目。
2,Python 配置管理工具:hydra vs OmegaConf
Hydra 和 OmegaConf 是两个紧密相连但分工不同的 Python 配置管理工具:OmegaConf 是底层的配置引擎库,而 Hydra 是基于 OmegaConf 构建的上层应用与运行框架。它们常被一同用于复杂的机器学习或科学计算项目。

就像前面的pl二创模板一样,hydra用的比较多
Hydra:
官方仓库:https://github.com/facebookresearch/hydra
官网文档:https://hydra.cc/docs/intro/

OmegaConf:
官方仓库:https://github.com/omry/omegaconf

3,超参数调优:optuna
官方仓库:https://github.com/optuna/optuna
官网文档:https://optuna.readthedocs.io/en/stable/index.html

Optuna 是一个特别为机器学习设计的自动超参数优化软件框架。它具有命令式的,define-by-run 风格的 API。
其实说起调超参,搞过sklearn的人基本上都熟悉GridSearchCV和RandomizedSearchCV。
简单来说,常用的调参方式包括网格搜索(Grid Search)、随机搜索(Random Search)和贝叶斯优化(Bayesian Optimization)等。
工具包方面,Scikit-learn提供了GridSearchCV和RandomizedSearchCV等用于网格搜索和随机搜索的工具。另外,有一些专门用于超参数优化的工具包,如Optuna、Hyperopt等。
这些方法各自有优缺点。网格搜索和随机搜索易于理解和实现,但在超参数空间较大时计算代价较高。贝叶斯优化考虑了不同参数之间的关系,可以在较少实验次数内找到较优解,但实现较为复杂。
Optuna就是一个基于贝叶斯优化的超参数优化框架。它的目标是通过智能的搜索策略,尽可能少的实验次数找到最佳超参数组合。
不仅sklearn框架中可以用,pytorch框架中也可以用。
4,训练过程中的可视化监控:tensorboard vs WB
TensorBoard 和 Weights & Biases (简称 WandB) 同样处于建模一条龙的「训练与实验追踪(Training & MLOps)」阶段。

TensorBoard:
官方仓库:https://github.com/tensorflow/tensorboard

WB(又叫wanDB,也就是weights&biases):
官方仓库:https://github.com/wandb/wandb

基本上用tensorboard,来训练lab的一些小型模型比较多,

5,模型可解释性:captum & SHAP
模型可解释性这一块,其实一直都有在提,只不过以前AI没有普及,炼出来1个model就算是大功告成,
现在做研究,尤其是AI4S这一块,对于模型可解释性的要求越来越高。
有比较经典的教材参考:https://github.com/christophM/interpretable-ml-book

SHAP其实是比较火的,因为用在一些树模型上比较多(而训练经典机器学习模型,其实比训练神经网络要简单一些),而且SHAP毕竟有数学理论知识背书(博弈论),所以SHAP传播得比较广。

SHAP参考:
官方仓库:https://github.com/shap/shap
官网文档:https://shap.readthedocs.io/en/latest/

captum参考:
官方仓库:https://github.com/meta-pytorch/captum
官网文档:https://captum.ai/

还有一些用的也比较多的算法和仓库,参考如下
https://github.com/interpretml/interpret
https://github.com/jacobgil/pytorch-grad-cam
https://github.com/marcotcr/lime
https://github.com/TransformerLensOrg/TransformerLens
https://github.com/SeldonIO/alibi
https://github.com/MAIF/shapash
另外参考:https://github.com/TannerGilbert/Model-Interpretation
6,Benchmark平台?
benchmark其实在部分AI4S领域还没有普及开来,规范和严格程度不如正经机器学习领域。
目前暂时没有找到将benchmark解耦开来的通用模块,huggingface倒是有不少关于NLP领域的bench仓库,但是不是一般意义上的通用。
7,部署:Gradio
目前暂时只了解这一个(集成在huggingface中):


# 1. 从现成的模板出发,到两个基本的pytorch体系(lightning、huggingface),以模板为基础,用两个体系的库来完善和补充相应任务的code writing
lightning hydra template 模板参考:https://github.com/ashleve/lightning-hydra-template,这是核心模板参考
核心部分是pytorch lightning+hydra,以及其余一些lightning生态的库
pytorch lightning参考:https://github.com/Lightning-AI/pytorch-lightning,基本上是 https://lightning.ai/docs/pytorch/stable/ 官网的所有文档,以v2.5.5为准
hydra参考:https://github.com/facebookresearch/hydra,基本上是https://hydra.cc/docs/intro/ 官网的所有文档,以v1.4为准
(hydra这里其实就是1个python文件配置库,底层是omegaconf,用于管理复杂的配置文件,以hydra为主)
其中一些lightning生态的一些其余的参考资料:frabic、litgpt、litdata,可以慢慢补充
最后是考虑到lightning生态的深度学习不一定全面,所以补充了一些huggingface的资料:都是在https://huggingface.co/docs界面开始选择的
首先是 交互问题:hub_python_library, 主要参考https://huggingface.co/docs/huggingface_hub/index
然后是一些核心的机器学习的库:主要参考 https://huggingface.co/docs/transformers/index(Ecosystem integrations没放进去)、https://huggingface.co/docs/diffusers/index(API部分没有放全,modular、models、pipelines、schedulers)、https://huggingface.co/docs/datasets/index、https://huggingface.co/docs/evaluate/index、https://sbert.net/(sentence transformer只放了了开头入门部分)
# 2. 模板搭完了,然后就是实际训练,trainer可以参考lightning 和 huggingface的trainer
# 3. 然后就是优化,比如说超参数搜索,主要参考optuna
主要参考:https://github.com/optuna/optuna
然后是官方的文档:https://optuna.readthedocs.io/en/stable/
以及官方示例仓库:https://github.com/optuna/optuna-examples
# 4. 训练过程中的可视化监控等
比如说 https://github.com/tensorflow/tensorboard
https://github.com/wandb/wandb
# 5. model训练完了,要进行研究意义了,比如说可解释性
可解释性就很多了,
比如说经典的机器学习+深度学习的,
shap参考 https://github.com/shap/shap
captum参考 https://github.com/meta-pytorch/captum
https://github.com/interpretml/interpret
https://github.com/jacobgil/pytorch-grad-cam
https://github.com/marcotcr/lime
https://github.com/TransformerLensOrg/TransformerLens
https://github.com/SeldonIO/alibi
https://github.com/MAIF/shapash
# 6. benchmark 或者部署
部署参考 huggingface的gradio
更多推荐




所有评论(0)