前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Llama2.c 学习笔记5: custom tokenizer

Llama2.c 学习笔记5: custom tokenizer

原创
作者头像
flavorfan
发布2023-08-18 16:29:08
5.4K1
发布2023-08-18 16:29:08
举报
文章被收录于专栏:范传康的专栏范传康的专栏

Follow新兴热门Github repo最让人兴奋的是:看着它从幼稚朝着成熟(神奇)发展,这个发展很快肉眼可见,神奇如昙花开放,但又在你理解范围之内(当前的知识储备加上搜一搜能够理解每一个修改的目的和神奇)。与之相反的是记忆中的被支配高数课,开课还是有条不紊,捡个笔的功夫再抬头已是二世为人。

1. 自定义标记符(Custom Tokenizer)

自定义标记符()对定制的特定领域 LLM 非常有用,因为较小的词汇表大小可以使模型更小、更快,而且可能更有能力。

如果开放私有的LLM小型应用程序,最好还是训练自己的标记符。这可以让一切变得更好--使用更小的词汇表,模型参数会更少(因为标记嵌入表会小得多),推理会更快(因为需要预测的标记会更少),每个示例的平均序列长度也会变小(因为对数据的压缩会更有效)。这样做的结果也更 "安全",因为训练有素的模型不会意外地输出一些随机的汉字,并在随后的标记中迅速 "脱轨"。

2. 训练自定义标记符的步骤

1)准备

作者使用google/sentencepiece来训练,python的库可以用下列指令安装

代码语言:javascript
复制
pip install sentencepiece==0.1.99

但是使用了sentencepiece的命令行工具需要编译源码

代码语言:javascript
复制
git clone https://github.com/google/sentencepiece.git 
cd sentencepiece/
ll
mkdir build
cd build/
cmake ..
make -j 8
make install

如果找不到链接库,还需要修改/etc/ld.so.conf,添加下列地址

代码语言:javascript
复制
/usr/local/lib64

2)训练标记符

代码语言:javascript
复制
python tinystories.py train_vocab --vocab_size=4096
python tinystories.py pretokenize --vocab_size=4096

train_vocab 指令会调用 "train_vocab.sh "脚本,该脚本会调用 "sentencepiece "库来训练标记化器,并将其存储在新文件 "data/tok4096.model "中。它使用字节对编码算法(Byte Pair Encoding algorithm),从文本数据的原始 utf8 字节序列开始,然后迭代合并最常见的连续标记对来形成词汇。

3)使用自定义标记符训练模型

代码语言:javascript
复制
python train.py --vocab_source=custom --vocab_size=4096 --device=cpu --batch_size=32 --eval_iters=5 --compile=False

资源贫瘠,用最简的参数跑起来,验证代码能够工作。

3. 模型及训练的对应修改

tokenizer修改,影响模型embedding的维度

1)run.c

添加对tokenizer的路径的参数的支持,参考笔记4: run.c分析,读取这个.bin文件初始化TransformerWeights中token_embedding_table。

代码语言:javascript
复制
 -z <string> optional path to custom tokenizer

2)train.py

参数方面添加了

代码语言:javascript
复制
vocab_source = "llama2" # llama2|custom; use Lllama 2 vocab from Meta, or custom trained
vocab_size = 32000 #

模型参数vocab_size从固定32000改为参数配置的vocab_size

代码语言:javascript
复制
model_args = dict(
    dim=dim,
    n_layers=n_layers,
    n_heads=n_heads,
    n_kv_heads=n_heads,
    vocab_size=vocab_size,
    multiple_of=multiple_of,
    max_seq_len=max_seq_len,
    dropout=dropout,
)  # start with model_args from command line

4. 使用自定义标记符进行Infer

将model文件转为bin文件

代码语言:javascript
复制
python tokenizer.py --tokenizer-model=data/tok4096.model

需要重新编译run.c,且使用自定义标记符运行

代码语言:javascript
复制
./run out/model.bin -z data/tok4096.bin

由于缺乏算力资源,这部分验证还未进行。

其他

使用自有数据、自定义标记符是定制的窄域 LLM 非常有用的技术,技术拼图又完善了一块。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 自定义标记符(Custom Tokenizer)
  • 2. 训练自定义标记符的步骤
    • 1)准备
      • 2)训练标记符
        • 3)使用自定义标记符训练模型
        • 3. 模型及训练的对应修改
          • 1)run.c
            • 2)train.py
              • 4. 使用自定义标记符进行Infer
              • 其他
              相关产品与服务
              命令行工具
              腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档