欢迎光临散文网 会员登陆 & 注册

点击即用的Plus版AI老婆教程:ChatGLM+VITS+机器翻译(Kaggle + Google Colab)

2023-03-25 18:37 作者:豚骨拉面--  | 我要投稿

(注:本专栏只讨论相关技术,不涉及任何其他目的,如侵删)

摘要

最近,清华大学NLP团队开源了一款对话语言模型ChatGLM-6B,拥有62亿参数,支持用户在消费级显卡上进行本地部署。然而,模型接近14GB的大小,最低的6GB显存要求,以及在CPU上极慢的推理速度,都大大影响本地部署的使用体验。为此,我写了一个简单的Kaggle Notebook,可以将ChatGLM-6B部署在Kaggle平台的GPU上。同时还结合了机器翻译模型和VITS模型,可实现一键点击即用,与AI老婆进行实时交互。在Kaggle上可以部署无量化(FP16)的ChatGLM,保持了模型最好的推理能力,同时仍具有较短的推理时间。另外我也写了一个Colab Notebook,可以在Google Colab上部署INT4量化后的模型。

本专栏实际上是对上一期视频的补充,由于本人还是初学者,代码部分难免有许多不正确之处,欢迎大家指正。

ChatGLM项目链接:https://github.com/THUDM/ChatGLM-6B

机器翻译模型链接:https://huggingface.co/engmatic-earth/mt5-zh-ja-en-trimmed-fine-tuned-v1

VITS模型链接:https://github.com/CjangCjengh/TTSModels

(上期视频投了好几次,不是内容违规就是简介违规,搞了半天也不知道到底哪出问题了,麻了)

前言(废话)

上一期专栏写完之后,本来想着短时间内应该不会再碰对话模型了,结果马上又看到清华开源ChatGLM-6B的消息。ChatGLM有62亿参数,远远多于GPT2的1亿参数,训练过程中也使用了RLHF,同时支持用户在消费级显卡上进行本地部署,可以说是ChatGPT的平替。

我一开始也想部署到本地,结合之前的机器翻译和VITS模型,看看AI老婆Plus版的效果。结果最小的INT4量化级别也需要6GB显存,我笔记本上的破1650根本跑不了,于是我决定转战Colab和Kaggle。由于模型大小以及CPU / GPU显存的问题,我修改了模型加载部分的代码,最终可以在Kaggle上使用无量化的ChatGLM,在Google Colab上使用INT4量化后的模型。

使用方式

Kaggle

Notebook链接:https://www.kaggle.com/code/littleweakweak/cybergirlfriendplus

首先,进入Notebook后选择GPU T4 × 2,然后点击Run All即可。

Google Colab

Colab Notebook链接:https://colab.research.google.com/drive/1h1LWEToiBXtR7uhsr6ZwSPfhE5QKEATK#scrollTo=L9WdjAleafGa

Colab不能选GPU,连接后选择全部运行即可。

等待一段时间(6-7min)后,程序会跳转到最后一个代码块的输入。使用方法如下:

  • 对话模式:输入“对话”可以启动对话模式,ChatGLM的输出文本会经过机器翻译和VITS,生成对应的日文语音。而想要修改设定时可以输入“取消对话”,这样可以只调用ChatGLM,节省输出时间。

  • 修改角色语音:输入“角色”,可以修改角色语音,这里我选用的是VITS项目作者开源的yuzusoft 7人模型,角色ID需要在0-6之间。

具体演示可以看视频:

这里我建议大家用Kaggle的版本,因为Kaggle平台提供了两块GPU,每一块都有15GB的显存,可以部署无量化模型,保持模型最好的推理能力。目前使用Colab偶尔可能会出现爆显存的情况,此时可以断开连接并删除运行时,然后重新运行整个Notebook。

如果只是想体验ChatGLM的b友按照上面的步骤就可以运行了,接下来我会大概描述一下代码细节,欢迎大家指正。关于VITS和机器翻译的部分可以看看上一期专栏:

模型部署

由于模型文件本身接近14GB,按照原项目提供的代码,似乎会将先模型加载到CPU上,然后再移至GPU:

而Kaggle和Colab的CPU都只有12GB的显存,根本加载不了。经过搜索,我使用Hugging Face的Accelerate库进行分布式加载,也就是把模型分布式加载到CPU / 两个GPU上,同时保证每一个GLMBlock在同一个设备上:

具体细节可见下面的链接:

https://huggingface.co/docs/accelerate/usage_guides/big_modeling

https://huggingface.co/docs/accelerate/package_reference/big_modeling

VITS模型下载

原作者提供的下载链接似乎不能直接在Kaggle或者Colab中下载。不过有人将模型上传到了Hugging Face,链接为https://huggingface.co/spaces/skytnt/moe-tts,模型在saved_model/0中:

这里我原来想只下载saved_model/0中的文件,但是由于整个项目是在Hugging Face Spaces下,搜索之后好像无法用Hugging Face的API实现?(有知道的大佬可以在评论区告诉我),所以我只能把整个项目都clone一遍:

在Notebook中播放语音

在Notebook中播放语音可以使用IPython库中的IPython.display.Audio函数,但是这个函数返回的是一个<IPython.lib.display.Audio object>。如果代码块中Audio函数没有接其他输入 / 输出,则程序可以直接播放对应语音(类似在代码块中直接输出变量):

但是这里我们需要在播放完语音后重新input,此时程序不会播放语音

因此我们需要调用IPython.display.display函数,它的功能和print类似(即直接输出变量print(变量)的区别),这样就可以播放语音了:

至此代码部分就讲完了,接下来是一些使用时的注意事项。

使用注意事项

  • ChatGLM模型的输出具有一定的随机性,输入同样的文本,每次的回答都不一样。视频中所展示的是我选取的效果比较好的一段,有时候模型会直接忘记自己的猫娘设定:

  • 机器翻译模型多数情况下效果还行,但是有部分词可能会错译或漏译。之前因为要在本地使用,所以对于模型输出的max_length和束搜索的num_beams,我选取了比较小的值。大家可以在最后一个代码块中修改一下,看看效果:

  • 由于我把整个moe-tts项目都clone了,saved_model中还有其他预训练模型,感兴趣的b友可以选择其他的模型进行尝试,修改模型文件路径即可:

同时,由于我使用的是7人模型,所以我加了一条assert防止模型运行不正常(如果输入大于7的数字,模型貌似会直接寄,会报错不在同一个device上,后续只能重新运行整个Notebook)。如果想使用其他模型,还需要修改一下assert部分:

结语

想不到又拿对话模型水了一期专栏不过整个过程还是挺有意思的,可以体验到平替版ChatGPT的强大。不得不说,开源确实是一项壮举,再次感谢这些开源的作者。如果大家有什么问题或者什么改进的建议,可以在评论区留言或者私信我,我也只是初学者,大家一起讨论和学习。

点击即用的Plus版AI老婆教程:ChatGLM+VITS+机器翻译(Kaggle + Google Colab)的评论 (共 条)

分享到微博请遵守国家法律