如题,研二狗一枚,之前一直在用Keras做毕设的简单CNN分类,现在要开始接触Transformer和扩散模型了,感觉Keras越来越难调,想换个主流框架深入学。翻了半天教程,发现PyTorch和TensorFlow都有死忠粉,一个说动态图Debug方便,另一个说TF配合TF Serving部署工业界无敌。我目前主要做图像生成方向,偶尔也要跑跑GPT之类的文本模型,实验室的服务器是A100,但师兄们好像都默认用PyTorch。想问下各位大佬,2024年了还有必要纠结这个吗?还是直接无脑上PyTorch?另外有没有推荐的适合新手的Transformer实践项目?提前谢谢了!
深度学习框架选择困难症发作:PyTorch还是TensorFlow,到底该梭哈哪个?
全部回复
共 43 条别纠结了,图像生成方向PyTorch生态碾压,Transformer项目直接搜HuggingFace官方教程就行。
既然师兄们都在用PyTorch,而且你实验室的A100驱动链早就跑熟了,直接跟着大部队走就是最省心的选择,别把时间浪费在纠结上。图像生成这边Diffusers库基本就是PyTorch生态的,扩散模型踩坑时搜到的解决方案九成都是PyTorch代码,TF的教程反而容易让你卡在版本兼容性上。至于TensorFlow Serving,等你真到了要部署的那天,PyTorch的TorchServe和ONNX路线也完全够用,何况你研究阶段根本碰不到工业级场景。新手项目的话,建议从HuggingFace的diffusers仓库里挑个简单的DDPM例子跑通,再逐步换UNet结构,比直接上大模型友好得多。
实验室师兄都用PyTorch就说明问题了,直接梭哈,别在框架上浪费时间。Transformer项目可以看看HuggingFace的官方教程,配着A100跑起来很爽。
实验室师兄们都在用PyTorch就已经说明问题了,A100跑图像生成和Transformer这种场景下PyTorch的生态确实最省心,HuggingFace的模型权重基本全是pt格式,你换成TF光转权重就够喝一壶的。TensorFlow那边现在感觉就是Google自己推的那套Keras 3在硬撑,社区活跃度真没法比,而且你提到的扩散模型像Stable Diffusion那些核心实现全是PyTorch写的,抄代码都方便。不过也别把TF一棍子打死,如果你以后要搞工业部署而且是纯CPU推理,TF Serving确实成熟,但你这科研方向明显更看重快速迭代,所以没必要纠结。新手实践项目的话我强烈推荐先复现一个简单的ViT或者DiT,直接看官方仓库的minGPT或者lucidrains的vit-pytorch,代码量小且注释清楚,比啃那些大而全的项目强得多。对了,你之前用Keras的话,迁移到PyTorch最需要适应的是手动管理设备和梯度,建议先花两天把DataLoader和autograd的机制摸透,不然会卡在日常bug上。反正我身边做生成模型的人没见过谁回头用TF的,除非以后你要去的那种公司强制规定技术栈,否则现阶段梭哈PyTorch基本不会后悔。
直接PyTorch吧,学术圈和生成模型生态都是它,跟着师兄走省得踩坑。
你都用A100了还纠结啥,PyTorch生态明显更适合搞研究和发论文,直接梭哈就完事了。
既然师兄们都用PyTorch,直接跟大部队走准没错,A100跑起来也顺。
新手项目可以试试官方的Diffusers库,从DDPM练手到Stable Diffusion一条龙。
你实验室师兄都默认PyTorch,那还纠结啥,直接跟着大部队走就完事了。尤其是图像生成这块,HuggingFace的diffusers和transformers库现在基本就是PyTorch的天下,你拿TensorFlow跑扩散模型,光是找现成代码就得比别人多花一倍时间,更别说踩坑了。TF Serving部署再香,那也是工业界的事,你现在研二搞科研发paper才是第一位,动态图调试起来真的能救命。
而且你之前用Keras,转PyTorch其实没什么门槛,就是换个语法习惯,但Debug的直观感完全不一样,尤其Transformer这种层层嵌套的模型,print中间变量和梯度太方便了。另外A100跑PyTorch的生态优化也做得更好,NVIDIA官方文档和apex这些工具基本都优先支持PyTorch,你师兄们的选择不是没道理的。
至于实践项目,直接去HuggingFace上找“vision-transformer-from-scratch”或者那个“annotated-diffusion”的repo,跟着代码敲一遍,比看教程效率高十倍。最后说句大实话,2024年这俩框架差距没那么大了,但你要是想在学术圈混,PyTorch就是默认语言,别跟趋势对着干。
说实话你实验室师兄都用PyTorch这点就已经是答案了,跟大部队走能少踩很多坑,尤其A100上NVIDIA对PyTorch的优化明显更上心,跑扩散模型时候 apex 和 xformers 这些库都是优先支持它的。TensorFlow不能说不行,但你要是想跑GPT这类文本模型,HuggingFace 的 Transformers 仓库里 PyTorch 权重和教程占绝对主流,转TF还得自己处理权重转换,太费劲了。而且你现在从Keras过来,PyTorch的动态图其实更接近你写Python原生逻辑的习惯,调试时候print中间变量直接看,不用像TF2那样还得开eager模式的各种别扭。不过也别完全抛弃TF,等你以后真搞工业部署,ONNX是一条路,TF Serving另一种方案,到时候现学也来得及,研究阶段效率优先。项目的话建议直接啃HuggingFace的diffusers库源码,里面从DDPM到Stable Diffusion的pipeline写得很清楚,再配一个李沐的《动手学深度学习》PyTorch版第13、14章,Transformer和扩散模型的基础就补上了。
实验室师兄都用PyTorch这点其实已经说明问题了,图像生成和Transformer这块PyTorch的生态资源确实碾压TF,HuggingFace全家桶也是默认PyTorch,直接梭哈省得后面踩坑。A100跑PyTorch也舒服,TF在A100上反而偶尔有点小毛病。新手实践项目的话可以试试HuggingFace的Diffusers库,里面自带很多训练脚本,从DDPM开始跑一遍就能理解扩散模型了。另外别太纠结部署,等你真到要上线那步,再学TF Serving或者用ONNX导出都不迟。
既然你师兄们都在用PyTorch,那就别纠结了,跟着实验室的主流走绝对是性价比最高的选择。不是TensorFlow不好,而是你以后跑代码、问问题、看开源项目,大概率都是PyTorch的社区资源更丰富,尤其是图像生成这块,HuggingFace上那些Diffusers模型基本全是PyTorch权重,你拿TF去转还得踩一堆坑。而且A100上PyTorch的分布式训练生态也成熟得多,真到要跑大模型的时候,你会发现大家讨论的都是torch.distributed,没几个人聊TF的。至于部署,说实话等你真到工业界那步,很多公司也会用ONNX转成其他格式,或者直接用Triton,不会死磕TF Serving的。新手练手项目的话,我建议直接去看HuggingFace的diffusers官方教程,从DDPM开始跑通一个简单的生成demo,然后照着官方示例改成你自己的数据集,比看那些又长又旧的博客强多了。最后提一句,Keras那个抽象层确实舒服,但等你写自定义loss和训练循环的时候,你会发现PyTorch的“麻烦”反而是种自由,调试起来更直观。
别纠结了,直接PyTorch,你师兄们用啥你跟着用啥准没错,Transformer项目去github搜pytorch官方examples就行。
别纠结了,直接PyTorch。你师兄们全用这个,到时候问问题、跑代码都方便,而且现在HuggingFace那套生态基本都优先支持PyTorch,Transformer和扩散模型这块资源多到溢出来。TF那边部署再强,你一个搞研究的也用不太到,真到了工业界再学TF也不迟。建议直接去啃HuggingFace的官方教程,从写个简单的Diffusion模型开始,比看那些拼凑的博客效率高多了。
直接梭哈PyTorch吧,既然师兄们都在用,遇到问题随便抓个人问都比看文档强。而且HuggingFace的Transformer库和扩散模型官方实现基本都是PyTorch写的,Keras转过来也顺滑,动态图调试确实省心。TF Serving那套部署优势等你真到了工业界再说,现在实验室阶段完全碰不到。项目的话建议先跑一遍HuggingFace的Diffusers教程,从DDPM到Stable Diffusion的代码都有,边跑边改比看论文实在多了。
既然实验室师兄们都在用PyTorch,那你跟着大部队走肯定是最稳的,遇到问题随便抓个人就能问,这比框架本身那点性能差异重要多了。而且你提到扩散模型和Transformer,现在HuggingFace生态基本就是PyTorch优先,很多预训练权重和示例代码都是torch版本先更新,TF那边经常要等或者自己转换,光这点就够让人头疼了。动态图调试确实省心,尤其你做图像生成,经常要打印中间层的张量看shape,PyTorch直接就能断点进去操作,TF2虽然也默认eager了但总感觉有些时候还是绕。至于部署问题,说真的等你毕业真进了工业界,大概率也是用ONNX转一圈,或者直接上TensorRT,TF Serving没那么不可替代,别为了这个牺牲日常开发效率。新手项目的话,我建议直接去HuggingFace的Diffusers库把里面几个经典例子跑一遍,比如DDPM或者Stable Diffusion的微调脚本,代码写得很清楚,顺便还能把UNet和CLIP这些组件都摸熟了。反正你现在A100算力也够,没必要在框架选择上纠结太久,先跑通一个扩散模型再说别的。
你这情况跟我实验室一个师弟简直一模一样,他去年也是从Keras跳过来,刚开始天天抱怨PyTorch写起来啰嗦,但两周后就真香了。图像生成这块,现在主流实现像Stable Diffusion、Diffusers全是PyTorch底子,你跟着源码学反而能少走弯路,TensorFlow那边生态确实在往JAX迁移,现在入TF有点49年入国军的意思。至于部署问题,说实话你研二阶段根本不用纠结,等真到了要上线模型的时候,PyTorch转ONNX再走TF Serving或者TorchServe都很成熟,A100上那点性能差异对你实验来说可以忽略。我建议直接梭哈PyTorch,别回头,然后去HuggingFace找些官方的Diffusers教程,从DDPM开始跑通一个MNIST生成,再换CIFAR10试attention模块,比看那些八股文博客有用得多。对了你师兄们如果都在用PyTorch,那代码交流起来也方便,遇到坑直接抄他们作业不香吗,何必自己对着Stack Overflow头疼。
实验室师兄都用PyTorch其实已经说明问题了,图像生成这块现在新论文基本全是PyTorch代码,抄作业都方便。TF的部署优势确实存在,但你做研究阶段根本碰不到工业上线那步,等真要部署了再转TF也不迟。新手项目的话可以试试HuggingFace的transformers仓库里那些官方example,从MNIST的ViT或者简单的diffusion模型开始,比直接啃完整项目友好很多。另外A100跑PyTorch的混合精度训练也比较顺手,不用太纠结。
直接梭哈PyTorch吧,A100加持下生态和教程都更顺,别在框架上内耗了。
你都说了师兄们默认PyTorch,那还纠结啥,直接跟着大部队走准没错,尤其扩散模型这块PyTorch的参考实现和预训练权重明显更全。TF的部署优势现在被TorchServe和ONNX追得差不多了,实验室场景真用不上那些工业级工具链。新手项目的话可以看看HuggingFace的Diffusers教程,从DDPM调起,再配合官方的ViT实现过一遍,比硬啃源码舒服多了。
师兄们全用PyTorch就是最好的答案,实验室资源对接和讨论问题都方便,别小看这点。图像生成这边扩散模型的主流实现也基本都在PyTorch上,TensorFlow虽然部署强但你做研究阶段根本用不到。Transformer新手项目可以看看HuggingFace的官方教程,从zero-shot情感分类开始,或者直接跑跑minGPT这种轻量实现,比啃论文快多了。
你其实已经有Keras基础了,转PyTorch的核心就是搞懂张量手动计算和nn.Module的写法,花一两天过一遍官方60分钟教程就够。A100跑模型的话记得早点学torch.compile和混合精度,省下的时间够你多调几个实验。别纠结了,直接梭哈PyTorch,反正你后面要是进工业界做部署,再补TensorFlow也不迟。