
ChatGLM源码解析
文章平均质量分 82
ChatGLM源码解析
强化学习曾小健
"强化学习曾小健2、强化学习曾小健3、我是机器人曾小健具身"都是该号副号。优快云全站80强博客、总近480w+浏览。AI生成式技术,计算机博士;llama3、Baichuan2、Qwen、GLM-4等等项目贡献人(ArtificialZeng)。这个博客的主题主要是强化学习技术、AI生成式技术、大模型多模态技术、机器人具身智能控制技术、机器/深度学习论文或科研前沿、GNN图神经网络、神经网络,包括人工神经网络和生物神经网络,及其大脑演化,智能和认知的产生,通用人工智能;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LLama-Efficient-Tuning源码解析 src/llmtuner/hparams/generating_args.py
的数据类,该类主要用于配置解码参数。这些参数可能与自然语言处理任务中的文本生成有关,如用于指定解码策略(贪婪解码、采样、束搜索等)。整体来说,这段代码定义了一个名为。原创 2023-09-10 17:44:59 · 377 阅读 · 0 评论 -
大模型 郭德纲生成 源码解析Crosstalk-Generation/code/train.py
总的来说,这段代码的主要作用是构建和初始化模型(包括编码器和解码器),构建优化器,并从checkpoint中加载模型和优化器的状态(如果提供了checkpoint)。,则从checkpoint中加载优化器的状态,并将状态加载到编码器和解码器的优化器中。,则从该路径加载模型的状态,并将状态加载到编码器和解码器中。初始化一些变量,包括开始的迭代次数、困惑度和打印的损失。,则从checkpoint中加载开始的迭代次数和困惑度。对编码器和解码器各自创建一个Adam优化器。输出一个消息,表明正在构建优化器。原创 2023-07-26 14:27:50 · 211 阅读 · 0 评论 -
大模型 角色化生成 源码解析:/data/pre.py
综上所述,这段代码主要用于处理 './data' 文件夹下的文件,使用 thulac 对文本进行分词,并将处理后的结果写入输出文件 'crosstalk.txt'。注意,它每次都是处理一对行,然后将这一对行写入到输出文件中。当 lst_line 不为 None 时,它会将 lst_line 和当前行的内容编码为 'utf-8',并写入输出文件 'crosstalk.txt'。对于读取到的每一行,它先使用 'gbk' 编码进行解码,然后移除了字符串中 ":" 之前的所有字符,同时去除了字符串两端的空白字符。原创 2023-07-26 10:51:52 · 259 阅读 · 0 评论 -
ChatGLM2-6B源码解析./ptuning/main.py (一)
如果training_args.should_log为真,那么设置日志等级为info,否则,根据training_args的内容设置日志等级。根据命令行参数中的do_train、do_eval和do_predict参数的值决定是进行训练、评估还是预测,并对数据集进行相应的预处理。如果提供了pre_seq_len参数,那么对模型进行半精度(half)计算,否则,进行单精度(float)计算。否则,直接从命令行参数解析。否则,加载预训练模型。,用于计算中文的Rouge分数,这是评估摘要和翻译的一个常用指标。原创 2023-07-08 22:22:10 · 2503 阅读 · 2 评论 -
ChatGLM2-6B源码解析./ptuning/main.py (二)
最后,对目标进行同样的处理,并将处理后的输入和目标加入到模型输入中。它的处理方式与eval的预处理函数类似,但有一些不同之处,例如它还添加了一个eos(end of sentence) token到输入和标签的末尾,并确保输入和标签的长度都符合最大序列长度。: 这是一个条件语句,如果训练参数中的do_train设定为True,那么它会执行训练数据的预处理并打印一个训练数据的示例。: 这也是一个条件语句,如果训练参数中的do_eval设定为True,那么它会执行验证数据的预处理并打印一个验证数据的示例。原创 2023-07-09 13:01:40 · 1256 阅读 · 0 评论 -
ChatGLM-Tuning/infer.ipynb 源码解析
这段代码主要是使用预训练的模型来生成一些文本,具体来说,它是从一个json文件中读取一些指令,并使用模型来生成相应的答案。:将out_text中的input_text和"\nEND"替换为空,然后去除两端的空白字符,返回的结果赋值给answer。:使用模型对input_ids进行生成,生成的最大长度为150,不进行采样,温度为0。这段代码的主要目的是使用预训练的模型对一些指令进行生成,并将生成的结果保存到answers列表中。这段代码的主要目的是使用预训练的模型对一些指令进行生成,并将生成的结果保存到。原创 2023-06-21 14:14:05 · 1219 阅读 · 0 评论 -
源码解析ChatGLM Efficient Tuning/src/utils/config.py
表示预训练模型的名称或路径。默认为 "THUDM/chatglm-6b",这可能是一个预训练模型的标识符。它们可以控制模型的微调过程,包括使用哪个模型,怎样量化模型,以及是否绘制训练损失等。: 表示是否从最后的 LoRA 权重继续训练,或者在合并权重后创建新的权重。: 存储从 huggingface.co 下载的预训练模型的位置。: 用于 int4 训练的量化数据类型。: 包含模型检查点以及配置的目录的路径。: 预训练标记器的名称或路径。: 预训练配置的名称或路径。: 包含奖励模型检查点的目录的路径。原创 2023-07-01 10:30:00 · 410 阅读 · 0 评论 -
ChatGLM2-6B源码解析 web_demo.py
这个界面包括一个聊天机器人,一个用户输入框,一个提交按钮,一个清空历史按钮,以及一些滑块用于控制模型的参数。总的来说,这是一个使用预训练的模型来生成对话的聊天机器人的程序,它有一个简单的用户界面,用户可以通过这个界面和机器人进行交流。函数接受用户的输入和一些模型参数,它首先把用户的输入添加到聊天记录中,然后用模型生成回复,最后返回聊天记录和新的历史记录。实例化的提交按钮,这会触发绑定到按钮上的函数,把用户的输入提交到聊天机器人,并接收聊天机器人的回应。,这些对象用于保存聊天的历史记录和模型的内部状态。原创 2023-06-26 19:33:54 · 4534 阅读 · 0 评论 -
ChatGLM Efficient Tuning DataCollator.py源码解析
类的初始化函数,接收一个分词器(tokenizer)、一个模型(model)、一个可选的布尔值参数。对象会被传递给数据加载器(data loader),用于生成模型的输入数据。的值选择使用 v1 版本还是 v2 版本的注意力掩码和位置标识生成函数。是用于处理不同长度的序列,将它们填充到相同长度的数据整理器,而。,这是一个特殊的索引值,用于在计算损失时忽略某些标记。定义了 v1 版本的注意力掩码生成函数,接收一个。定义了 v1 版本的位置标识生成函数,接收一个。张量和一个设备对象,返回一个位置标识张量。原创 2023-06-30 19:59:28 · 507 阅读 · 0 评论 -
ChatGLM Efficient Tuning源码解析src/utils/seq2seq.py (二)
在循环中,这行将每对预测和标签以JSON格式转换为字符串,然后添加到结果列表中。- 这行将结果列表连接成一个字符串,每个结果之间用换行符隔开,然后写入到文件中。- 这行使用分词器解码标签,移除特殊符号,并删除前后的空白。- 这行打开预测结果输出文件,以写入模式,准备写入预测结果。的预测值被保留,忽略索引的预测值被替换为填充符号的ID。- 这行初始化一个空的列表,准备收集每一行的预测结果。- 这行开始一个循环,遍历所有的预测值和标签。- 这行创建了一个新的标签数组,其中。- 这行定义了一个新的类,原创 2023-06-29 16:42:14 · 387 阅读 · 0 评论 -
PyTorch源码解析torch/nn/modules/module.py
创建的副本,那么会发出警告,因为这些副本的参数是从原始模型中复制过来的,它们在自动求导中不是叶节点,所以不会积累梯度。函数内的部分文档说明了这个方法的作用,即将所有模型参数的梯度设为零。这是一段 PyTorch 的代码,用于定义模型训练中常见的几个方法,包括进入评估模式、设置参数。函数内的部分文档说明了这个方法的作用,即把模块设置为评估模式。否则,如果参数的梯度不是来自于另一个计算的结果,那么将参数的。函数内的部分文档说明了这个方法的作用,即改变模块中参数的。是一个循环,遍历模块的所有参数。原创 2023-07-03 14:40:16 · 348 阅读 · 0 评论 -
ChatGLM 源码分析main.py
这个Trainer对象将处理模型的训练和评估。总的来说,这段代码定义了一个脚本,它可以从命令行参数或json文件中获取配置信息,然后加载数据集和预训练模型,对数据进行预处理,并训练或评估模型。最后,如果指定了要进行模型预测,将加载训练过的模型,并使用预处理后的测试数据集对模型进行预测,保存预测结果。然后,如果指定了要进行模型训练,将使用预处理后的训练和评估数据集对模型进行训练,并在训练结束后保存模型。之后,根据模型处于训练、评估还是预测阶段,使用相应的预处理函数处理数据集,并得到预处理后的数据集。原创 2023-06-26 14:06:13 · 1842 阅读 · 0 评论 -
ChatGLM-6B源码解析 之 cli_demo.py
它首先定义一个空的历史对话列表,然后进入一个无限循环,在循环中等待用户输入,并对用户输入做出响应。: 定义主函数,处理用户输入和模型响应的交互,可以响应"stop"和"clear"命令,可以通过Ctrl+C来中断模型的响应。这个函数接收一个历史对话的列表,然后将其格式化为一个提示文本,包括用户和ChatGLM-6B的所有对话内容。: 定义一个信号处理函数,当接收到中断信号时,改变全局变量stop_stream的值。: 定义一个全局变量stop_stream,用于控制是否停止模型的流式对话。原创 2023-06-20 20:08:45 · 1960 阅读 · 0 评论 -
ChatGLM源码解析 main.py
这样做的好处是,训练过程结束之后,可以直接打开这个文件查看训练的结果,而不需要重新运行整个脚本。这部分代码首先给每个输入添加前缀,然后使用分词器对输入进行处理,包括分词、截断和填充,得到模型的输入数据。然后对样本集中的每个样本进行遍历,只有当样本中的提问和回答都存在时,才进行处理。,这是由源序列的最大长度和目标序列的最大长度之和得出的。然后,计算context的长度,并生成标签,标签是由-100和回答部分的token id组成。这行代码设置了日志的基本配置,包括日志信息的格式,日期的格式,以及日志处理器。原创 2023-06-27 17:44:10 · 1419 阅读 · 0 评论 -
ChatGLM-Tuning/finetune.py 源码解析 ChatGLM LoRA tuning
然后,在训练过程中或训练完成后,可以使用 TensorBoard 工具来查看这些信息,以便于理解模型训练的过程和效果,调整模型的参数和训练策略。这样,用户可以在TensorBoard的可视化界面中实时观察到模型训练过程中的各项指标,如损失函数值的变化情况、各项评估指标的变化情况等。和对应的标签,它们都是PyTorch的LongTensor类型,长度都与最长的“input_ids”的长度相同。的“input_ids”进行填充,使其长度与最长的“input_ids”的长度相同,填充的元素是。原创 2023-06-23 17:58:00 · 699 阅读 · 1 评论 -
ChatGLM-6B源码解析 之 cli_demo.py
它首先定义一个空的历史对话列表,然后进入一个无限循环,在循环中等待用户输入,并对用户输入做出响应。: 定义主函数,处理用户输入和模型响应的交互,可以响应"stop"和"clear"命令,可以通过Ctrl+C来中断模型的响应。这个函数接收一个历史对话的列表,然后将其格式化为一个提示文本,包括用户和ChatGLM-6B的所有对话内容。: 定义一个信号处理函数,当接收到中断信号时,改变全局变量stop_stream的值。: 定义一个全局变量stop_stream,用于控制是否停止模型的流式对话。原创 2023-06-20 20:08:45 · 1960 阅读 · 0 评论 -
transformers库源码解析/src/transformers/tools/agents.py(二)from_pretrained()方法
这是LocalAgent类的构造函数,接受五个参数。model和tokenizer是用于生成文本的模型和分词器。chat_prompt_template、run_prompt_template和additional_tools这三个参数是可选的,分别代表聊天提示模板、运行提示模板和附加工具。和这两行将输入的model和tokenizer保存为LocalAgent对象的属性。原创 2023-07-06 15:47:57 · 1688 阅读 · 0 评论 -
ChatGLM Efficient Tuning源码解析 src/utils/peft_triner.py
这段代码根据微调类型来加载模型,如果微调类型为 "lora",则加载对应的模型。在加载模型时,需要知道模型的checkpoint路径和当前激活的模型适配器。这里的 "最佳模型" 是指在训练过程中,根据某种度量指标(例如验证集上的准确率)表现最好的模型。这是一个加载模型参数的方法,它会加载之前保存的最优模型。在开始加载模型前,会先记录一条日志,标明要加载的模型的路径和该模型的分数。这是一个保存模型参数的方法,它会在指定的输出目录中保存训练后的模型。是一个训练回调类,该类的方法会在训练过程中的特定阶段被调用。原创 2023-07-06 09:30:49 · 465 阅读 · 0 评论 -
ChatGLM Efficient Tuning源码解析 src/utils/common.py(二)load_pretrained
如果微调类型是 "p_tuning",则采用 "cpm" 的量化,否则采用 "bnb" 的量化。如果模型不可训练,则采用 "cpm" 的量化。52-55. 如果微调类型为 "p_tuning",那么设置 P-Tuning v2 的配置,这是 ChatGLM 自带的 P-Tuning 方法。总的来说,这个函数主要是对预训练模型和分词器的加载,根据不同的需求(如训练还是推断、是否进行微调、进行何种量化等)进行相应的设置和配置。",因为 "RM" 和 "PPO" 训练只能使用 "LoRA" 方法。原创 2023-07-06 09:00:55 · 497 阅读 · 0 评论 -
源码解析 ChatGLM Efficient Tuning utils/common.py
判断微调的类型,并根据微调的类型进行不同的处理。例如,如果微调类型为 "full",则将模型的所有参数转换为 float 类型;如果微调类型为 "p_tuning" 或 "lora",则通过特定的方式加载参数等。输入参数包括预训练模型、模型参数、微调参数和一个指示模型是否可训练的布尔值,返回值是经过微调的模型。最后,如果存在模型检查点,那么在日志中记录已加载的模型检查点信息,并返回微调后的模型。,输入是模型、模型参数、微调参数和一个布尔值,输出是微调后的模型。检查并加载模型检查点。原创 2023-07-06 08:52:05 · 1200 阅读 · 0 评论 -
大模型微调样本构造的trick
有了这两点我们就可以设想,如果构造多轮对话样本的input为 Q1 A1 Q2 A2 Q3 A3 ,在计算loss的时候,只需要计算 A1 A2 和 A3 部分,岂不是就可以进行session级别的训练了?对 A,B,C影响的权重分别为,17/24 5/24 1/12。对 A,B,C影响的权重分别为,2/3 1/6 1/6。,故不能高效训练,这也是chatglm初代的很大的一个问题,导致后续微调的效果都比较一般。影响权重要比拆开更大。原创 2023-07-05 15:01:13 · 332 阅读 · 0 评论 -
ChatGLM Efficient Tuning源码解析train_sft.py
定义一个字典,这个字典包含了一些关键词参数,用于调控模型生成文本时的行为,比如"do_sample"决定是否采样,"top_p"决定在生成时采样的集中程度,"max_new_tokens"是生成的最大长度,"temperature"用于调整采样过程中的随机性等。总的来说,这是一个非常通用的模型训练、评估和预测的框架,可以用于许多不同的序列到序列的任务。:模型参数(model_args),数据参数(data_args),训练参数(training_args),微调参数(finetuning_args)。原创 2023-06-29 16:18:24 · 2214 阅读 · 0 评论 -
ChatGLM Efficient Tuning源码解析 src/utils/peft_trainer.py
它重写了on_log方法,在每次训练过程打log时,它会计算一些关于训练过程的信息,然后将这些信息写入到一个JSONL(JSON Lines)格式的文件中,以便后续进行分析或可视化。:在输出目录下创建一个名为"trainer_log.jsonl"的文件,以追加模式打开。:在初始化函数中,定义了一个成员变量start_time,记录了初始化的时间。:定义了on_log方法,这个方法是在训练过程中每次打log时被调用。:如果最新的log中不包含"loss",则不执行下面的语句。原创 2023-07-01 14:03:24 · 598 阅读 · 1 评论