书生·浦语训练营二期第二次笔记

news2024/12/24 10:11:23

1. 部署 InternLM2-Chat-1.8B 模型进行智能对话

1.1 配置环境

  1. 创建conda环境,安装必要的库
studio-conda -o internlm-base -t demo
# 与 studio-conda 等效的配置方案
# conda create -n demo python==3.10 -y
# conda activate demo
# conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia

在这里插入图片描述

  1. 配置完成后,进入到新创建的 conda 环境之中:
conda activate demo

在这里插入图片描述

  1. 输入以下命令,完成环境包的安装:
pip install huggingface-hub==0.17.3
pip install transformers==4.34 
pip install psutil==5.9.8
pip install accelerate==0.24.1
pip install streamlit==1.32.2 
pip install matplotlib==3.8.3 
pip install modelscope==1.9.5
pip install sentencepiece==0.1.99

在这里插入图片描述
查看该环境内已安装的包

conda list

1.2 下载 InternLM2-Chat-1.8B 模型

  1. 按路径创建文件夹,并进入到对应文件目录中:
mkdir -p /root/demo
touch /root/demo/cli_demo.py
touch /root/demo/download_mini.py
cd /root/demo

这里的touch命令用于创建两个空的Python文件:cli_demo.pydownload_mini.py。如果这些文件已经存在,touch命令不会更改它们的内容,只会更新时间戳。

touch命令通常用于:

  1. 创建空文件
  2. 更新文件的时间戳(访问时间和修改时间)
  3. 避免在脚本或Makefile中创建文件时出现"文件不存在"的错误
    通过左侧文件夹栏目,双击进入demo文件夹。
  1. 双击打开 /root/demo/download_mini.py 文件,复制以下代码:
import os
from modelscope.hub.snapshot_download import snapshot_download

# 创建保存模型目录
os.system("mkdir /root/models")

# save_dir是模型保存到本地的目录
save_dir="/root/models"

snapshot_download("Shanghai_AI_Laboratory/internlm2-chat-1_8b", 
                  cache_dir=save_dir, 
                  revision='v1.1.0')

在这里插入图片描述
3. 执行命令,下载模型参数文件:

python /root/demo/download_mini.py

在这里插入图片描述
4. 运行 cli_demo
双击打开 /root/demo/cli_demo.py 文件,复制以下代码:

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM


model_name_or_path = "/root/models/Shanghai_AI_Laboratory/internlm2-chat-1_8b"

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0')
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='cuda:0')
model = model.eval()

system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语).
- InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
- InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文.
"""

messages = [(system_prompt, '')]

print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============")

while True:
    input_text = input("\nUser  >>> ")
    input_text = input_text.replace(' ', '')
    if input_text == "exit":
        break

    length = 0
    for response, _ in model.stream_chat(tokenizer, input_text, messages):
        if response is not None:
            print(response[length:], flush=True, end="")
            length = len(response)

使用 Hugging Face Transformers 库与 InternLM 对话模型进行交互的 Python代码。

  1. 加载分词器和模型:

    • tokenizer = AutoTokenizer.from_pretrained(...): 加载与模型相对应的分词器。
    • model = AutoModelForCausalLM.from_pretrained(...): 加载语言模型,使用 bfloat16 数据类型,并指定设备为 cuda:0
    • model = model.eval(): 将模型设置为评估模式。
  2. 定义系统提示:

    • system_prompt = """...""": 定义一个系统提示,介绍 InternLM 助手的基本信息。
  3. 初始化消息列表:

    • messages = [(system_prompt, '')]: 将系统提示添加到消息列表中。
  4. 开始交互循环:

    • while True: 进入无限循环,直到用户输入 “exit” 时退出。
    • input_text = input("\nUser >>> "): 提示用户输入问题。
    • input_text = input_text.replace(' ', ''): 去除输入文本中的空格。
  5. 生成助手的响应:

    • for response, _ in model.stream_chat(tokenizer, input_text, messages): 使用 stream_chat 方法生成助手的响应。
      • tokenizer: 分词器对象。
      • input_text: 用户输入的问题。
      • messages: 之前的对话消息列表。
    • 循环内部:
      • 如果 response 不为 None,则打印从上次打印的长度到当前长度的新生成内容。
      • 更新 length 变量为当前响应的长度。

在命令行运行
python /root/demo/cli_demo.py

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义 Unity Scene 的界面工具

介绍 文档中会进行SceneView的自定义扩展,实现显示常驻GUI和添加自定义叠加层(Custom Overlay)。 最近项目开发用回了原生的Unity UI相关内容。对于之前常用的FairyGUI来说,原生的UGUI对于UI同学来讲有些不太方便。再加上这次会…

圈子小程序源码-圈子系统成品搭建-APP小程序H5三端源码交付,支持二开!PHP书写,uniAPP后端开发!

【首页】 圈子列表页可分为个人圈子、企业圈子、加入圈子、智诚工业圈子 (平台圈) 四种。 其中重要圈子可选择置顶,方便快速进入:个人圈子和企业圈子数量有限始终位于前位。也可通过搜索快速搜索圈子。 为了实现流量分散入口的集中,将创建企业圈子、发…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考: 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…

缓存(反向代理)服务器-varnish

varnish简介: varnish是一款高性能且开源的反向代理服务器和HTTP加速器,(其实就是带缓存的反向代理服务器)它可以把整个HTTP响应内容缓存到内存或文件中,从而提高web服务器器的响应速度。 与传统的squid相比&#xff0…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

【opencv】教程代码 —features2D(6)透视矫正:读取两个棋盘格图片并进行图像对齐...

perspective_correction.cpp 透视校正 hconcat(img2, img1_warp, img_draw_warp); hconcat(img1, img2, img_draw_matches); #include <iostream> // 引入iostream库&#xff0c;用于进行标准输入和输出操作 #include <opencv2/core.hpp> // 引入opencv的core库&am…

session学习

3次请求均有sessionID session的作用 跟踪用户的行为&#xff0c;方便日后推荐客户端和服务器交互相对安全些session是代表会话&#xff0c;也可理解为客户端和服务端的交互sessionID是服务器生成的唯一字符串&#xff0c;用来跟踪用户行为cookie是浏览器自带的&#xff0c;专…

4.1作业

对菱形继承给出的代码中每一个类&#xff0c;写一个有参构造函数写出下列类的&#xff0c;构造函数(有参、无参)&#xff0c;析构函数&#xff0c;拷贝构造函数和拷贝赋值函数 class Father { int *p; const string name; } class Son:public Father { int *age; 3整理思维导图…

【JavaWeb】Day30.SpringBootWeb请求响应——响应

响应 HTTL协议的交互方式&#xff1a;请求响应模式&#xff08;有请求就有响应&#xff09;那么Controller程序&#xff0c;除了接收请求外&#xff0c;还可以进行响应。 1.ResponseBody 在我们前面所编写的controller方法中&#xff0c;都已经设置了响应数据。 controller方…

前端订阅推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据&#xff0c;每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议&#xff0c;它的特点是无状态、无连接和单向的。在HTTP协议中&#xff0c;客户端发起请求&#xff0c;服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

路径规划——搜索算法详解(六):LPA*算法详解与Matlab代码

上文讲解了D*算法&#xff0c;D*算法为在动态环境下进行路径规划的场景提出了可行的解决方案&#xff0c;本文将继续介绍另外一种动态规划路径的方法——Lifelong Planning A*&#xff08;LPA*&#xff09;算法。 该算法可以看作是A*的增量版本&#xff0c;是一种在固定起始点…

语音克隆技术浪潮:探索OpenAI Voice Engine的奇妙之旅

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Bridge Champ与Ignis公链:探索Web3游戏的新未来

在数字化和去中心化的浪潮中&#xff0c;Web3游戏与公链的融合为游戏行业带来了新的变革。特别是&#xff0c;Bridge Champ和Ignis公链的结合&#xff0c;展示了一种全新的游戏生态模式&#xff0c;不仅为玩家提供了更加公平、透明的游戏体验&#xff0c;同时也为游戏开发和运营…

Higress 基于自定义插件访问 Redis

作者&#xff1a;钰诚 简介 基于 wasm 机制&#xff0c;Higress 提供了优秀的可扩展性&#xff0c;用户可以基于 Go/C/Rust 编写 wasm 插件&#xff0c;自定义请求处理逻辑&#xff0c;满足用户的个性化需求&#xff0c;目前插件已经支持 redis 调用&#xff0c;使得用户能够…

C++ 注册Nacos

下载源码&#xff1a; git clone GitHub - nacos-group/nacos-sdk-cpp: C client for Nacos 编译源码 cd nacos-sdk-cpp cmake . make 生成库文件 在nacos-sdk-cpp 下 注册nacos 将include 和libnacos-cli.so libnacos-cli-static.a 放入你的工程 如果Nacos服务地址:…

3.26号arm

1. SPI相关理论 1.1 概述 spi是一种同步全双工串行总线&#xff0c;全称串行外围设备接口 通常SPI通过4个引脚与外部器件相连&#xff1a; MISO&#xff1a;主设备输入/从设备输出引脚。该引脚在从模式下发送数据&#xff0c;在主模式下接收数据。 MOSI&#xff1a;主设备输…

LangChain入门:9.使用FewShotPromptTemplate实现智能提示工程

在构建智能提示工程时&#xff0c;LangChain 提供了强大的 FewShotPromptTemplate 模型&#xff0c;它可以帮助我们更好地利用示例来指导大模型生成更加优质的提示。 在这篇博文中&#xff0c;我们将使用 LangChain 的 FewShotPromptTemplate 模型来设计一个智能提示工程&#…

StarRocks使用Minio备份和还原

1.安装minio minio api端口&#xff1a;9090 下文用到这个端口 必须提前创建好桶: packfdv5 名称自定义和后面对上就可以 2.创建备份仓库 格式&#xff1a; CREATE REPOSITORY <repository_name> WITH BROKER ON LOCATION "s3a://<bucket_name>/backup…

47.goto语句

目录 一.goto语句 二.语法格式 三.举例 四.视频教程 一.goto语句 goto语句可以使程序在没有任何条件的情况下跳转到指定位置&#xff0c;所以goto语句也就跳转语句。 二.语法格式 格式1&#xff1a;goto label&#xff1a;//其他代码 lable&#xff1a;//其他代码格式2&a…

【Node.js从基础到高级运用】二十、Node.js 强大的REPL

引言 Node.js REPL&#xff08;Read-Eval-Print Loop&#xff09;是一种交互式的命令行工具&#xff0c;它允许开发者快速地执行JavaScript代码&#xff0c;并查看结果。这个功能在进行快速原型设计、调试、学习JavaScript或Node.js时非常有用。 启动REPL 首先&#xff0c;确保…