当前位置: 首页 > news >正文

LLMs之Grok-1:run.py文件解读—运行语言模型实现推理—即基于用户的输入文本利用grok_1语言模型来生成文本

LLMs之Grok-1:run.py文件解读—运行语言模型实现推理—即基于用户的输入文本利用grok_1语言模型来生成文本

目录

run.py文件解读—运行语言模型实现推理—即基于用户的输入文本利用grok_1语言模型来生成文本

概述

1、加载预训练的语言模型 grok_1

1.1、定义模型的配置

2、定义并初始化推理运行器

2.1、创建一个 InferenceRunner 对象(用于运行模型推理)

2.2、调用 inference_runner.initialize() 方法初始化推理运行器。

2.3、调用 inference_runner.run() 方法运行模型推理并获取生成器。

3、模型生成

全部代码


run.py文件解读—运行语言模型实现推理—即基于用户的输入文本利用grok_1语言模型来生成文本

源码地址:grok-1/run.py at main · xai-org/grok-1 · GitHub

概述

这段代码使用了一个预训练的语言模型 grok_1_model 来生成文本。代码首先定义了模型的配置,然后创建了一个 InferenceRunner 对象来运行模型推理。最后,代码定义了一个输入字符串,并使用 sample_from_model 函数从模型中获取一个样本,将其打印出来。

1、加载预训练的语言模型 grok_1

1.1、定义模型的配置

定义一个名为 grok_1_model 的 LanguageModelConfig 对象,该对象包含有关模型配置的详细信息,例如词汇表大小、序列长度、嵌入层初始化比例、输出和嵌入层的乘数比例等。模型的架构是一个 TransformerConfig 对象,其中包括了嵌入大小、扩展因子、键大小、头数量、层数、注意力输出乘数等参数。

2、定义并初始化推理运行器

2.1、创建一个 InferenceRunner 对象(用于运行模型推理)

InferenceRunner 接受一个 ModelRunner 对象作为参数,该对象包含了模型配置、批处理大小、检查点路径等信息。InferenceRunner 还需要指定一些其他参数,如名称、加载路径、分词器路径、本地和跨主机配置等。

2.2、调用 inference_runner.initialize() 方法初始化推理运行器。

2.3、调用 inference_runner.run() 方法运行模型推理并获取生成器。

3、模型生成

定义一个输入字符串 inp,然后使用 sample_from_model 函数从生成器中获取一个样本,并将其打印出来。

全部代码

# Copyright 2024 X.AI Corp.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.import loggingfrom model import LanguageModelConfig, TransformerConfig, QuantizedWeight8bit as QW8Bit
from runners import InferenceRunner, ModelRunner, sample_from_modelCKPT_PATH = "./checkpoints/"def main():grok_1_model = LanguageModelConfig(vocab_size=128 * 1024,pad_token=0,eos_token=2,sequence_len=8192,embedding_init_scale=1.0,output_multiplier_scale=0.5773502691896257,embedding_multiplier_scale=78.38367176906169,model=TransformerConfig(emb_size=48 * 128,widening_factor=8,key_size=128,num_q_heads=48,num_kv_heads=8,num_layers=64,attn_output_multiplier=0.08838834764831845,shard_activations=True,# MoE.num_experts=8,num_selected_experts=2,# Activation sharding.data_axis="data",model_axis="model",),)inference_runner = InferenceRunner(pad_sizes=(1024,),runner=ModelRunner(model=grok_1_model,bs_per_device=0.125,checkpoint_path=CKPT_PATH,),name="local",load=CKPT_PATH,tokenizer_path="./tokenizer.model",local_mesh_config=(1, 8),between_hosts_config=(1, 1),)inference_runner.initialize()gen = inference_runner.run()inp = "The answer to life the universe and everything is of course"print(f"Output for prompt: {inp}", sample_from_model(gen, inp, max_len=100, temperature=0.01))if __name__ == "__main__":logging.basicConfig(level=logging.INFO)main()

相关文章:

  • 【Flink connector】文件系统 SQL 连接器:实时写文件系统以及(kafka到hive)实战举例
  • Maven 继承父工程时的relativePath标签解析用法
  • ACL和NAT
  • 程序员开发技术整理
  • Python包管理工具 pip 及其常用命令和参数用法
  • 计算机网络——数据链路层(差错控制)
  • uniapp小程序中onShareAppMessage(OBJECT)实现带参数的分享功能
  • 以太网PHY,MAC及其通信接口介绍
  • Code Review(代码审查)
  • HTML5 、CSS3 、ES6 新特性
  • 宝塔面板操作一个服务器域名部署多个网站
  • [第五章]图论BFS
  • Facebook多个广告账户被封禁的原因及解决方法
  • 【openGL4.x手册09】转换反馈
  • ROM-IP
  • Bytom交易说明(账户管理模式)
  • Docker容器管理
  • DOM的那些事
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Linux快速复制或删除大量小文件
  • Shell编程
  • tweak 支持第三方库
  • vue数据传递--我有特殊的实现技巧
  • Vue小说阅读器(仿追书神器)
  • webpack入门学习手记(二)
  • 百度地图API标注+时间轴组件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分享几个不错的工具
  • 思否第一天
  • 通过几道题目学习二叉搜索树
  • 无服务器化是企业 IT 架构的未来吗?
  • 想写好前端,先练好内功
  • 协程
  • 一天一个设计模式之JS实现——适配器模式
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎样选择前端框架
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #include到底该写在哪
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(selector).each()和$.each()的区别
  • $.ajax中的eval及dataType
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (09)Hive——CTE 公共表达式
  • (4)(4.6) Triducer
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .libPaths()设置包加载目录
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版