1、LLaMa模型代码:
GitHub - facebookresearch/llama: Inference code for LLaMA models
不同模型对参数规模要求不同,有7B、13B、30B(33B)和65B四个数据规模。
| Model | MP |
|---|---|
| 7B | 1 |
| 13B | 2 |
| 30B(33B) | 4 |
| 65B | 8 |
2、环境检查
(1)、检查CUDA环境是否已安装(没有的话先安装CUDA):

(2)、检查是否已安装Pytorch(没有的话先安装Pytorch):

3、LLaMa模型下载:
(1)、7B模型:
nyanko7/LLaMA-7B at main (huggingface.co)
(2)、13B模型:
elinas/alpaca-13b-lora-int4 at main (huggingface.co)
(3)、30B模型:
elinas/llama-30b-int4 · Hugging Face
(4)、65B模型:
nyanko7/LLaMA-65B at main (huggingface.co)
(5)、下载之前创建一个llama.cpp文件夹,在此文件夹创建一个models文件夹。
将所下载的不同版本模型文件下载到models文件夹。文件应该按如下结构存放到刚刚建立的"Models“文件夹:
% ls ./models
7B
13B
30B
65B
llama.sh
tokenizer.model
tokenizer_checklist.chk
(6)其它版本LLaMa下载:
由于Meta官方最小的7B模型对显存和内存要求比较高。
这里选择了一个量化版7B的小模型来测试。量化版7B小模型下载地址:
GitHub - ggerganov/llama.cpp: Port of Facebook's LLaMA model in C/C++
4、 克隆项目并配置环境:
git clone https://github.com/facebookresearch/llama.git
cd llama
pip install -r requirements.txt
pip install -e
5、运行以下命令,将第一个Pth脚本转换为ggml.py格式:
python convert-pth-to-ggml.py models/7B/ 1
将在"7B”文件夹产生一个名为”models/7B/ggml-model-f16.bin"的文件。
6、运行以下命令,将第二个脚本 "quantize"量化为4bit文件。
./quantize ./models/7B/ggml-model-f16.bin ./models/7B/ggml-model-q4_0.bin 2
将在"7B”文件夹产生一个名为”models/7B/ggml-model-q4_0.bin"的文件。
7、运行LLaMa模型:
(1)使用Docker运行LLaMa模型。
(2)使用WebUI运行LLaMA 模型。
(3)使用以下方式运行LLaMa模型:
./main -m ./models/7B/ggml-model-q4_0.bin \
-t 8 \
-n 128 \
-p 'The first man on the moon was '
./main--帮助显示[选项]。
-m是模型。
-t是要使用的线程数。
-n是要生成的令牌数。
-p是要输入的提示词。
8、以下是完整的帮助输出:
./main[选项]
选项:
-h、 --帮助显示此帮助消息并退出
-s SEED,--种子(默认值:-1)
-t N,--N个线程[计算期间要使用的线程数(默认值:4)]
-p PROMPT,--提示词
提示开始生成(默认值:随机)
-n n,--n_predict n个要预测的令牌数(默认值:128)
--top_k N top-k采样(默认值:40)
--top_p N top-p采样(默认值:0.9)
--temp N温度(默认值:0.8)
-b N,--batch_size N用于提示处理的批量大小(默认值:8)
-m FNAME,--模型的首个名称
模型路径(默认值:models/llama-7B/ggml model.bin)
9、实验结果:

10、能力表现对比:

(1) 常识推理:
LLaMA-65B 比Chinchilla-70B和PaLM540B稍强。LLaMA-13B推理能力比GPT-3强。
(2) 闭卷问答:
LLaMA-65B比GPT-3和Chinchilla具有竞争力。
(3) 阅读理解:
LLaMA-13B比GPT-3稍强。
(4)数学推理:
LLaMA65B优于Minerva-62B。
(5) 代码生成:
LLaMA优于LaMDA和PaLM。
(6) 多任务语言理解:
LLaMA-65B比Chinchilla70B和PaLM-540B稍逊。
(7) 训练能力进化:
未知。
参考:
1、GitHub - ggerganov/llama.cpp: Port of Facebook's LLaMA model in C/C++2、Running LLaMA 7B and 13B on a 64GB M2 MacBook Pro with llama.cpp | Simon Willison’s TILs
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/