小工具知识网

当前位置: 首页 > 行业知识 > llama2.c

行业知识

llama2.c

2026-11-05 23:15:52 来源:互联网转载

1、下载模型

从Hugging Face下载��文微型Llama2基础模型,这是一个参数量115M左右的超微型小模型,采用Llama2架构。

()

2、将模型hf格式转换为bin格式

python export.py ./model/chinese-baby-llama2.bin --hf /mnt/workspace/llama2.c/model

model文件夹中命名一个文件chinese-baby-llama2.bin,chinese-baby-llama2压缩包和解压的都放在model文件夹的

3、debug export.py

修改arg中3代码

()
parser.add_argument("--filepath", type=str,default="/mnt/workspace/llama2.c/model/chinese-baby-llama2.bin", help="the output filepath")group = parser.add_mutually_exclusive_group()group.add_argument("--hf", type=str,default="/mnt/workspace/llama2.c/model", help="huggingface model path")

4、几个重点

4.1 model

 model = load_hf_model(args.hf)

输出的model

Transformer(  (tok_embeddings): Embedding(32000, 768)  (dropout): Dropout(p=0.0, inplace=False)  (layers): ModuleList(    (0): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (1): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (2): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (3): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (4): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (5): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (6): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (7): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (8): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (9): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (10): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )    (11): TransformerBlock(      (attention): Attention(        (wq): Linear(in_features=768, out_features=768, bias=False)        (wk): Linear(in_features=768, out_features=768, bias=False)        (wv): Linear(in_features=768, out_features=768, bias=False)        (wo): Linear(in_features=768, out_features=768, bias=False)        (attn_dropout): Dropout(p=0.0, inplace=False)        (resid_dropout): Dropout(p=0.0, inplace=False)      )      (feed_forward): FeedForward(        (w1): Linear(in_features=768, out_features=2268, bias=False)        (w2): Linear(in_features=2268, out_features=768, bias=False)        (w3): Linear(in_features=768, out_features=2268, bias=False)        (dropout): Dropout(p=0.0, inplace=False)      )      (attention_norm): RMSNorm()      (ffn_norm): RMSNorm()    )  )  (norm): RMSNorm()  (output): Linear(in_features=768, out_features=32000, bias=False))

4.2 legacy_export

用于将模型参数以特定格式保存到二进制文件中

4.2.1

out_file.write(header)

构建文件头部信息,其中包括模型的一些参数,如隐藏层维度、层数、注意力头数等。这些参数被打包成一个结构体,并写入到二进制文件中。

4.2.2 serialize_fp32(out_file, model.tok_embeddings.weight)

将模型的 token embeddings 权重写入二进制文件。

4.2.3 循环

for layer in model.layers:        serialize_fp32(out_file, layer.attention_norm.weight)    for layer in model.layers:        serialize_fp32(out_file, layer.attention.wq.weight)    for layer in model.layers:        serialize_fp32(out_file, layer.attention.wk.weight)    for layer in model.layers:        serialize_fp32(out_file, layer.attention.wv.weight)    for layer in model.layers:        serialize_fp32(out_file, layer.attention.wo.weight)

几个循环分别处理模型的注意力层和前馈神经网络层的权重,并将它们写入二进制文件。其中,serialize_fp32用于张量以单精度浮点数的格式写入到二进制文件中。

最终生成chinese-baby-llama2.bin

5、run.c

5.1 文件结构

llama2.c》debug22》CMakeLists.txt

CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.16)project(llama2.c)set(CMAKE_BUILD_TYPE debug) # Debug Releaseset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/")set(CMAKE_CXX_STANDARD 14)SET(CMAKE_C_ FLAGS "${ACMAE_C_FLASS} -O0 -ffast-math -manch=native -fopenmp -mavx2 -mfma -DEISEN_STACK_ALLOCATION_LIMIT=0")SET(CNAKE_CXX_FLAGS "${ACNAKE_CXX_FLASS} -O0 -ffast-math -march=native -fopenmp -mavx2 -mfma -DEITOEN_STACK_ALOCATION_LITRIT=0")add_executable(run /mnt/workspace/llama2.c/run.c)target_link_libraries(run -lpthread -lm -ldl -m64 -lpthread)

5.2 run.c代码

int main(int argc, char *argv[]) {    // default parameters    char *checkpoint_path = NULL;  // e.g. out/model.bin    float temperature = 1.0f;   // 0.0 = greedy deterministic. 1.0 = original. don't set higher    float topp = 0.9f;          // top-p in nucleus sampling. 1.0 = off. 0.9 works well, but slower    int steps = 256;            // number of steps to run for    // char *prompt = "NULL";        // prompt string    char *prompt = "今天是武林大会,我是武林盟主";        // prompt string    unsigned long long rng_seed = 0; // seed rng with time by default    char *mode = "generate";    // generate|chat    char *system_prompt = NULL; // the (optional) system prompt to use in chat mode    // poor man's C argparse so we can override the defaults above from the command line    char *tokenizer_path = "/mnt/workspace/llama2.c/model/tokenizer.bin";    if (argc >= 2) { checkpoint_path = argv[1]; } else { error_usage(); }

5.3 开始debug

cd /mnt/workspace/llama2.c/debug22

5.3.1 编译

cmake .make

5.3.2 启动调试器

gdb ./run

5.3.3 设置断点

break main

5.3.3 set args

set args /mnt/workspace/llama2.c/model/chinese-baby-llama2.bin

5.3.4 run起来

run>next  ==  r>n

5.3.5 生成

今天是武林大会,我是武林盟主,也是少林掌门,我们还是拭目以待吧!”一行八人已经呈到击中点,急!这得是多么累的!不适合这华要你为何在这里共操两场,悲催了!刚才给了冷然一剑的地方,就是至于是射中的方向,大厅边缘那处就是形意拳的设计所在,此时却是化作一片虚无。一身黑衣,头上带着一个斗笠的大错睁开眼睛,披肩的长发随意飘舞。左手托着左胸,右手却从小腹下抽出来一只浴桶,不想在这娇美的身躯里被你的小手会碰,让你一下子金星直冒,身躯一阵摇晃,只见又呻吟一声,向后倒去。青石板落下的确是一年多没有有一个骷髅头,最有多年没有进行过了!这一招,还是要用“小之间”,举手投足间,破坏大家的心神!果然,就在千钧一发之际,房顶上也终于全部被铺盖过去了,玩笑,小型的平台,各处都是厚厚的灰,犹如冬日的习惯了,周围更是笼罩着漫天的灰雾,擂台山的边缘处,一片荒凉!如此资质,令欢乐迷醉!随着堂主的暴喝,六百名青衫中年人瞬间起立!九人齐齐的暴体而出,每人

achieved tok/s: 2.399571

参考链接:

①https://zhuanlan.zhihu.com/p/674666408

②https://github.com/karpathy/llama2.c

上一篇:邮箱收件服务器设置怎么填?

下一篇:金星下载和平精英攻略,极速下载,轻松掌握游戏技巧!