2025-08-2102ai门户网
编辑:编辑部
【本站导读】如何无痛玩转Llama3,这个手把手教程一看就会!80亿参数推理单卡半分钟速成,微调700亿参数仅用4卡近半小时训完,还有100元代金券免费薅。
就在昨天,许多网友纷纷表示,自己收到了OpenAI暂用API的邮件。
邮件中,OpenAI宣布自7月9日起,将不再对中国等不支持国家的用户提供API服务。
许多开发者听到之后,犹如晴天霹雳,在AI圈里可是吵翻了天。这意味着,不仅是国内开发者,就连企业,都需要寻找新的解决方案。
现在看来,能与GPT-4分庭抗礼的Llama3大模型,无疑是一个不错的选择。
Llama作为一个完全开源的模型,只要我们有机器,就相当于有了可以不限使用次数的大语言模型帮忙处理任务。
甚至,可以微调这个模型来实现适合自己需求的独特业务场景!
不过,在使用Llama3之前,还需先在Meta这边填一个表格,并签一个长长的英文协议;然后会被指引到一个GitHub地址,并收到一个邮件链接去下载模型。
此外,如果想体验最大、效果最好的700亿参数模型,下载所需的时间也十分「令人酸爽」,尤其是在没有科学加速的情况下。
因为我们一直没有下好Llama3的模型权重,所以今天没法带大家体验了,此贴到此结束。(不是)
开玩笑的,我们最近发现了一家宝藏公司,所有的下载和配置都已经提前帮我们完成了!
不但700亿参数需要耗费132GB存储的模型已经放在了公开数据中,而且还配置好了Llama3的推理和训练微调环境。
换句话说就是,完全不用操心代码库的依赖安装问题,直接上手用就完事了。
更幸运的是,他们的机器真的很便宜!
潞晨云平台:https://cloud.luchentech.com/
话不多说,在完成潞晨云账户注册充钱等一系列流程后,我们就开了个机器试了一波。
推理
根据Llama3官方网址用80亿参数的模型推理只需1卡,而700亿的模型需要8卡。
接下来,我们先来试试用单卡跑较小的80亿模型进行推理。
Llama3推理:https://github.com/meta-Llama/Llama3#inference
选一块A800的卡,计费方式已经默认选择了更省钱的潮汐计费。
在公共镜像中找到Llama3的推理镜像,然后选择1张显卡,勾上「允许SSH连接」,「存储持久化」,「挂载公开数据」,最后点击右下角的创建。
速度还挺快,不到半分钟,机器就已经初始化好了。
复制SSH链接,在terminal进行连接。
诚不欺我,两个Llama3的权重都已经在公开数据盘中,无需下载。
先试一个简单的推理。模型权重的初始化十分快捷,大约半分钟。
很快就推理完成了。
似乎写了一半被截断了,应该是max_length给太短,我们调整到200,再来一次。
这次生成结果变长了不少,不过看起来Llama380亿的模型能力还是一般,比如突然生成了「3.TheUnitedKingdom」这个部分,前后文不是很严谨。
我们还注意到,在没有给prompt的情况下,模型两次都生成同样的开头。这引起了我们的好奇,于是我们决定从代码层面,看看到底是怎么一回事。
把ColossalAI的代码下载到了本地,看一下ColossalAI/examples/inference/llama/llama_generation.py这个文件:
ColossalAI代码地址:https://github.com/hpcaitech/ColossalAI
原来是之前跑这个脚本用了默认的prompt,现在,我们换成一个自定义的文本提示试试。
从结果来看,虽然可以成功继续生成,但是有点越扯越远了,除了前两句,后面并没有像我们期待的那样讲一个故事。
下面,让我们来体验一下Meta-Llama-3-8B-Instruct有对话能力的模型的效果。
首先,参考Llama3官网中对话模型指令的格式。
Llama3ModelCards:https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3/
先写一个简单的通过对话让模型写故事的指令。
因为在bash里面传这么多特殊符号的指令已经不太方便了,我们用了潞晨云的jupyter链接,在里面直接对ColossalAI/examples/inference/llama_generation.py进行了修改,让它可以读取一个指令的txt文件(如dialog.txt),对每一行进行生成并保存到txt文件中(如dialog_resp.txt)。
大概就是这样:
然后跑指令模型。
不久之后,文件生成。
非常好,这次模型终于真的在讲故事了!感觉指令模型会比基础的模型更好用一些。
完成推理后,赶紧关闭潞晨云机器,毕竟是计时收费的,省钱要紧。
在单卡上尝试过80亿参数模型的效果以后,我们再来试试更大的700亿参数模型。
毕竟,这可是一个和GeminiPro1.5打成平手的模型呢!
此时我们发现,其实Llama-Factory的代码既支持推理也支持微调,所以干脆直接拿这个镜像来试试好了。
Llama-Factory项目地址:https://github.com/hiyouga/LLaMA-Factory
和之前一样的流程启动云主机,这次选择Llama-Factory镜像,卡数选4即可。
教程地址:https://cloud.luchentech.com/doc/docs/image/llama-factory/
启动时间还是一如既往的快。
我们按照潞晨云教程提示,把模型路径改到了本地。
然后直接开始和700亿的模型进行对话!
这次,我们还是让模型讲一个关于深海鲸鱼的故事。
可以看到,效果拔群!由于完全不用修改代码提示,可以直接输入对话内容,使用体验感直接拉满。
模型写了一个名叫Aria的蓝鲸的故事,讲她在一次海底探险中遇到了海底秘密守护者。守护者告诉她她的歌声有特殊的力量。最终她成功联合了海底生物并打败了因人类污染而出现的黑暗力量。
这个故事中出现了一个名字「Abyssaria」,于是我们继续针对这个名字进行提问。
很快,模型就进一步对于这个海底城市进行了描述。不愧是700亿参数的模型,效果真的不赖。
微调
针对微调,Llama-Factory已经给出了资源使用的预估。
那接下来,我们就来尝试一下先用Lora微调Llama3的小模型。
这次镜像依旧用Llama-Factory。
根据上图中的资源预估,我们用Lora训练80亿参数的模型仅需一卡,而700亿参数的模型4卡A800即可。
打开Jupyter链接转到机器后,一样是把模型路径改到了本地,节省时间免下载。
可以看到这边默认用两个数据集,「identify」和「alpaca_en_demo」进行微调。我们很快就找到了这两个数据集的位置,放在/root/LLaMA-Factory/data下。
这个格式是真的很简单了,想要用自己的数据来微调这个模型,只需要把训练数据整理成一样的格式,再上传到云机器即可。
以下分别是他们的数据例子:
#identity.json,[{"instruction":"hi","input":"","output":"Hello!Iam{{name}},anAIassistantdevelopedby{{author}}.HowcanIassistyoutoday?"},...]#alpaca_en_demo.json[{"instruction":"Describeaprocessofmakingcrepes.","input":"","output":"Makingcrepesisaneasyanddeliciousprocess!Herearestep-by-stepinstructionsonhowtomakethem: 1.Assembleyouringredients.Forbasiccrepes,you"llneed:1cupall-purposeflour,2eggs,1/2cupmilk,1/2cupwater,1/4teaspoonsalt,and2tablespoonsmeltedbutter. 2.Mixthebatter:Inalargemixingbowl,whisktogethertheflourandtheeggs.Graduallyaddthemilkandwater,stirringconstantlytoensurethattherearenolumps.Addsaltandmeltedbutter,andmixwell. 3.Letthebatterrest:Ifyoucan,letthebattersitforanhourorso.Thiswillhelptheflourtoabsorbtheliquidandmakethecrepesmoretender. 4.Heatyourpan:Preheatanon-stickpanovermediumheat.Lightlybutterthepanorusecookingspraytopreventthecrepesfromsticking. 5.Pourthebatter:Usingaladleorameasuringcup,pourasmallamountofbatter(about1/4cup)ontothecenterofthepan.Immediatelytiltthepaninacircularmotiontospreadthebatterevenlyandthinlyoverthebottomofthepan. 6.Cookthecrepe:Cookthecrepefor1-2minutesuntilthebottomislightlygolden.Carefullyloosentheedgeswithaspatulaandflipthecrepeovertocooktheothersideforanotherminute. 7.Removeandrepeat:Gentlyslidethecrepeontoaplate,andthenrepeattheprocesswiththeremainingbatter.Remembertore-butterthepanbetweeneachcrepeifnecessary. 8.Fillandserve:Fillyourcookedcrepeswithyourdesiredfilling,suchasfreshfruit,whippedcream,Nutella,orhamandcheese.Rollorfold,andserveimmediately.Enjoy!"},...]我们用以下指令启动训练单卡训练:
可以看到,训练过程中loss稳定下降,整个微调流程大概耗时8分钟左右。
模型也顺利保存到了指定的路径下。
整体来说,训练流程非常便捷!
如果大家有过微调模型的经历,那么一定知道微调过程中大概率遇到各式各样的问题,比如机器环境不匹配,出现NaN等,有的模型甚至还需要自己手动改代码才能跑起来。
而今天的训练却完全不用担心Lora要怎么设置,不用操心环境配置,训练途中完全没有遇到任何问题。
其实如果只是Lora微调80亿参数的模型,那完全没必要开多卡训练。
不过对于700亿的模型,我们直接开启4卡来尝试一下。
先用同样的方法,修改模型路径:
然后,开始训练!
在训练时,我们踩过一个坑:
一开始用了examples/lora_multi_gpu/llama3_lora_sft.yaml这个文件,然后发现这个文件只支持数据并行而没有对模型进行切割。结果就是,每一台GPU上都需要保存整个模型,导致模型上传了17/30的时候就遭遇了内存溢出。
不过,切换到examples/lora_multi_gpu/llama3_lora_sft_ds.yaml后,4卡就可顺利跑起Lora训练啦!
上传整个700亿参数的模型大约耗时两分半。
训练一千条数据的时间这次较久,26分钟。不过这个也可以理解,毕竟模型权重放在了4个显卡上,也造成了一些通讯时间的消耗。
在尝试了潞晨云后,我们发现,微调似乎比想象中的更简单,只要自己按格式准备好数据,就能直接在平台上跑通这个模型,操作丝滑,基本不用debug~
而且,其实还有更省钱的方法,甚至能不用自掏腰包,通过分享就可得到100元的机器使用代金券:
从此,再也不用担心没资源做实验了!
即使跑不起700亿的模型的多次实验,也完全可以先在80亿的模型上单卡多次实验,再把有希望的结果用700亿大模型一步到位!
相关资源链接:
Meta的Llama3平台:https://llama.meta.com/llama3/
潞晨云平台:https://cloud.luchentech.com/
潞晨云Llama3用户手册:
https://cloud.luchentech.com/doc/docs/image/llamahttps://cloud.luchentech.com/doc/docs/image/llama-factoryLLaMA-Factory:https://github.com/hiyouga/LLaMA-Factory
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表本站立场。文章及其配图仅供学习分享之
新品榜/热门榜