真·ChatGPT平替:无需显卡,MacBook、树莓派就能运行LLaMA
机器之心报道
编辑:小舟
Meta发布的开源系列模型LLaMA,将在开源社区的共同努力下发挥出极大的价值。
Meta在上个月末发布了一系列开源大模型——LLaMA(LargeLanguageModelMetaAI),参数量从70亿到650亿不等。由于模型参数量较少,只需单张显卡即可运行,LLaMA因此被称为ChatGPT的平替。发布以来,已有多位开发者尝试在自己的设备上运行LLaMA模型,并分享经验。
虽然相比于ChatGPT等需要大量算力资源的超大规模的语言模型,单张显卡的要求已经很低了,但还能更低!最近有开发者实现了在MacBook上运行LLaMA,还有开发者成功在4GBRAM的树莓派上运行了LLaMA7B。
这些都得益于一个名为llama.cpp的新项目,该项目在GitHub上线三天,狂揽4.6kstar。
项目地址:https://github.com/ggerganov/llama.cpp
GeorgiGerganov是资深的开源社区开发者,曾为OpenAI的Whisper自动语音识别模型开发whisper.cpp。
这次,llama.cpp项目的目标是在MacBook上使用4-bit量化成功运行LLaMA模型,具体包括:
没有依赖项的普通C/C++实现;
Applesiliconfirst-classcitizen——通过ArmNeon和Accelerate框架;
AVX2支持x86架构;
混合F16/F32精度;
4-bit量化支持;
在CPU上运行。
llama.cpp让开发者在没有GPU的条件下也能运行LLaMA模型。项目发布后,很快就有开发者尝试在MacBook上运行LLaMA,并成功在64GBM2MacBookPro上运行了LLaMA7B和LLaMA13B。
在M2MacBook上运行LLaMA的方法:https://til.simonwillison.net/llms/llama-7b-m2
如果M2芯片MacBook这个条件还是有点高,没关系,M1芯片的MacBook也可以。另一位开发者分享了借助llama.cpp在M1Mac上运行LLaMA模型的方法。
在M1Mac上运行LLaMA的方法:https://dev.l1x.be/posts/2023/03/12/using-llama-with-m1-mac/
除了在MacBook上运行,还有开发者借助llama.cpp在4GBRAMRaspberryPi4上成功运行了LLaMA7B模型。Meta首席AI科学家、图灵奖得主YannLeCun也点赞转发了。
以上是3个在普通硬件设备上成功运行LLaMA模型的例子,几位开发者都是借助llama.cpp实现的,可见llama.cpp项目的实用与强大。我们来具体看一下llama.cpp的使用方法。
以7B模型为例,运行LLaMA的大体步骤如下:
#buildthisrepogitclonehttps://github.com/ggerganov/llama.cppcdllama.cppmake#obtaintheoriginalLLaMAmodelweightsandplacethemin./modelsls./models65B30B13B7Btokenizer_checklist.chktokenizer.model#installPythondependenciespython3-mpipinstalltorchnumpysentencepiece#convertthe7BmodeltoggmlFP16formatpython3convert-pth-to-ggml.pymodels/7B/1#quantizethemodelto4-bits./quantize.sh7B#runtheinference./main-m./models/7B/ggml-model-q4_0.bin-t8-n128
运行更大的LLaMA模型,需要设备有足够的存储空间来储存中间文件。
如果想获得像ChatGPT一样的交互体验,开发者只需要以-i作为参数来启动交互模式。
./main-m./models/13B/ggml-model-q4_0.bin-t8-n256--repeat_penalty1.0--color-i-r"User:"\-p\"Transcriptofadialog,wheretheUserinteractswithanAssistantnamedBob.Bobishelpful,kind,honest,goodatwriting,andneverfailstoanswertheUser'srequestsimmediatelyandwithprecision.User:Hello,Bob.Bob:Hello.HowmayIhelpyoutoday?User:PleasetellmethelargestcityinEurope.Bob:Sure.ThelargestcityinEuropeisMoscow,thecapitalofRussia.User:"
使用--color区分用户输入和生成文本之后,显示效果如下:
一番操作下来,开发者就能在自己的简单设备上运行LLaMA模型,获得类ChatGPT的开发体验。以下是项目作者GeorgiGerganov给出的LLaMA7B模型详细运行示例:
make-j&&./main-m./models/7B/ggml-model-q4_0.bin-p"Buildingawebsitecanbedonein10simplesteps:"-t8-n512Illama.cppbuildinfo:IUNAME_S:DarwinIUNAME_P:armIUNAME_M:arm64ICFLAGS:-I.-O3-DNDEBUG-std=c11-fPIC-pthread-DGGML_USE_ACCELERATEICXXFLAGS:-I.-I./examples-O3-DNDEBUG-std=c++11-fPIC-pthreadILDFLAGS:-frameworkAccelerateICC:Appleclangversion14.0.0(clang-1400.0.29.202)ICXX:Appleclangversion14.0.0(clang-1400.0.29.202)make:Nothingtobedonefor`default'.main:seed=1678486056llama_model_load:loadingmodelfrom'./models/7B/ggml-model-q4_0.bin'-pleasewait...llama_model_load:n_vocab=32000llama_model_load:n_ctx=512llama_model_load:n_embd=4096llama_model_load:n_mult=256llama_model_load:n_head=32llama_model_load:n_layer=32llama_model_load:n_rot=128llama_model_load:f16=2llama_model_load:n_ff=11008llama_model_load:ggmlctxsize=4529.34MBllama_model_load:memory_size=512.00MB,n_mem=16384llama_model_load:....................................donellama_model_load:modelsize=4017.27MB/numtensors=291main:prompt:'Buildingawebsitecanbedonein10simplesteps:'main:numberoftokensinprompt=151->''8893->'Build'292->'ing'263->'a'4700->'website'508->'can'367->'be'2309->'done'297->'in'29871->''29896->'1'29900->'0'2560->'simple'6576->'steps'29901->':'samplingparameters:temp=0.800000,top_k=40,top_p=0.950000Buildingawebsitecanbedonein10simplesteps:1)Selectadomainnameandwebhostingplan2)Completeasitemap3)Listyourproducts4)Writeproductdescriptions5)Createauseraccount6)Buildthetemplate7)Startbuildingthewebsite8)Advertisethewebsite9)Provideemailsupport10)SubmitthewebsitetosearchenginesAwebsiteisacollectionofwebpagesthatareformattedwithHTML.HTMListhecodethatdefineswhatthewebsitelookslikeandhowitbehaves.TheHTMLcodeisformattedintoatemplateoraformat.Oncethisisdone,itisdisplayedontheuser'sbrowser.Thewebpagesarestoredinawebserver.Thewebserverisalsocalledahost.Whenthewebsiteisaccessed,itisretrievedfromtheserveranddisplayedontheuser'scomputer.Awebsiteisknownasawebsitewhenitishosted.Thismeansthatitisdisplayedonahost.Thehostisusuallyawebserver.Awebsitecanbedisplayedondifferentbrowsers.Thebrowsersarebasicallythesoftwarethatrendersthewebsiteontheuser'sscreen.Awebsitecanalsobeviewedondifferentdevicessuchasdesktops,tabletsandsmartphones.Hence,tohaveawebsitedisplayedonabrowser,thewebsitemustbehosted.Adomainnameisanaddressofawebsite.Itisthenameofthewebsite.Thewebsiteisknownasawebsitewhenitishosted.Thismeansthatitisdisplayedonahost.Thehostisusuallyawebserver.Awebsitecanbedisplayedondifferentbrowsers.Thebrowsersarebasicallythesoftwarethatrendersthewebsiteontheuser’sscreen.Awebsitecanalsobeviewedondifferentdevicessuchasdesktops,tabletsandsmartphones.Hence,tohaveawebsitedisplayedonabrowser,thewebsitemustbehosted.Adomainnameisanaddressofawebsite.Itisthenameofthewebsite.Awebsiteisanaddressofawebsite.ItisacollectionofwebpagesthatareformattedwithHTML.HTMListhecodethatdefineswhatthewebsitelookslikeandhowitbehaves.TheHTMLcodeisformattedintoatemplateoraformat.Oncethisisdone,itisdisplayedontheuser’sbrowser.Awebsiteisknownasawebsitewhenitishostedmain:mempertoken=14434244bytesmain:loadtime=1332.48msmain:sampletime=1081.40msmain:predicttime=31378.77ms/61.41mspertokenmain:totaltime=34036.74ms
看来,LLaMA将在Meta和开源社区的共同努力下,成为众多开发者钻研大规模语言模型的入口。