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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能文档合规检测系统:在央企国企招标采购领域的应用

一、背景介绍 在央企国企采购过程中,合规性是一个不可忽视的重要方面。采购方需要确保供应商的资质、业绩、规模等条件符合采购要求,同时避免设置不合理的条件限制或排斥潜在供应商。为了提高采购效率和确保合规性,智能文档合规检测系统应运…

ZKFair 步入Dargon Slayer 新阶段,未来还有哪些财富效应?

在当前区块链技术的发展中,Layer 2(L2)解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术,但它仍面临一些关键问题和挑战,例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

十四.PyEcharts基础学习

目录 1-PyEcharts介绍 优点: 安装: 官方文档: 2-PyEcharts快速入门 2.1 第一个图表绘制 2.2 链式调用 2.3 opeions配置项 2.4 渲染图片文件 2.5 使用主题 3-PyEcharts配置项 3.1 初始化配置项InitOpts InitOpts 3.2 全局配置项set_global_o…

非关系型数据库——Redis配置与优化

目录 一、关系型数据库和非关系型数据库 1.定义 1.1关系型数据库 1.2非关系型数据库 2.非关系型数据库产生的背景 3.关系型数据库和非关系型数据库区别 3.1适用性不同 3.2数据一致性要求不同 3.3数据模型不同 3.4数据查询语言不同 3.5数据存储方式不同 3.6扩展方式…

教育信创,重磅发布 |易安联联合飞腾发布全场景教育信创白皮书

教育信创正当时,科技飞扬腾风起! 3月28日,《教育行业数字化自主创新 飞腾生态解决方案白皮书》重磅发布!白皮书历时一年,由国产芯片龙头飞腾信息技术有限公司主持,易安联与25所代表院校、66位专家&#xf…

Leetcode - 391周赛

目录 一,3099. 哈沙德数 二,3100. 换水问题 II 三,3101. 交替子数组计数 四,3102. 最小化曼哈顿距离 一,3099. 哈沙德数 本题计算一个整数能否被它各个位数上的数字之和整除,如果能整除,返回…

本地镜像推送到harbor

1.登录已安装docker容器的服务器绑定hosts 输入:vi /etc/hosts 添加:10.128.XXX.27 harbor.com 2.将https请求更改为http请求 vi /etc/docker/daemon.json 添加: { "insecure-registries":["http://harbor.com:80"]…

从永远到永远-Git中tag的使用

Git中tag的使用 1.tag的作用2.使用背景3.tag的使用1.种类2.创建标签3.查看标签3.推送标签4. 删除标签: 4.idea可视化操作1.创建标签2.推送标签 999 删除、指定commit、验证暂时不表 1.tag的作用 Tag(标签)用来记录某个特定的提交(commit)。一个 Tag 被用来标记重要的历史节点&…

Nacos的搭建和使用——SpringCloud Alibaba

1. 概要说明 在使用Nacos之前,请在你的虚拟机中下载好Nacos,再进行连接本机使用 port:8848 本机访问地址:http://{虚拟机ip}:8848/nacos/ 访问账号密码:nacos/nacos 2. Nacos的作用 2.1 服务发现中心 微服务将自身注册至Nacos&am…

没想到?React 编译器还可以玩这个?!

🔥🔥🔥 前方高能,干货满满,建议点赞➕关注➕收藏; React 19 和 React 编译器(此前称作React Forget)最近一个月成为了 React 社区热议的焦点。大家都对于可能很快就不必再在 React …

备战蓝桥杯Day36 - 动态规划 - 三角形最小路径和问题

一、什么是动态规划 通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式解决。 哪些问题可以使用动态规划? 1、具有最优子结构:问题的最优解所包含的子结构的解也是最优的 2、具有无后效性:未来…

爬取BOSS直聘招聘数据(详情页数据+__zp_stoken__逆向)

这里携带逆向方法进行请求 获得数据 需要逆向方法请私聊 , 下面部分只展示爬取思路 对网页进行分析抓包 设置参数 – 城市/薪资范围/职业 对网页进行请求获得数据集 利用xpath,soup等进行进行数据清洗 将数据一csv的格式保存

稳定性生产总结

本期我们来谈下稳定性生产这个话题,稳定性建设目标有两个:降发生、降影响, 在降发生中的措施是做到三点:系统高可用、 高性能、 高质量,三高问题确实是一个很热的话题,里面涉及很多点。 在降影响中要做到…

Express.js项目实战(1)—— 我的藏书馆

首先新建文件夹——myLibrary 在vscode中点击文件>点击 Duplicate Workspace(以工作区的方式打开文件夹myLibrary) 点击duplicate Workspace(打开工作区) 之后,会出现以下界面 点击打开文件夹,选择新建的文件夹,会出…

小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密

前言 有道和招标网的加密入口定位在前面两期做了详细的介绍,本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度,确定数据接口,发现传入的参数需要加密,响应的结果需要解密,后…

为什么鸿蒙系统那么火,就业岗位却很少?而且很少有公司愿意培养新人?

近期某乎上有这么一则问答提问:“为什么鸿蒙系统那么火,就业岗位却很少?而且很少有公司愿意培养新人?” 都说2024是原生鸿蒙的关键一年,华为鸿蒙各种大动作也没有停过。根据智联招聘数据显示,2023年9月-12月,鸿蒙相关职位数同比…

【Linux入门】Linux简史

Linux 是什么?Linux 是一款叫做操作系统的软件。 操作系统这款软件有什么样的意义呢?简单来说,比如有顾客买了一台笔记本电脑,这台笔记本电脑由电脑硬件组成,在这堆硬件上一定搭载了一款操作系统。正因为操作系统存在&…

【Unity每日一记】这些时间成员变量你是否清楚(Timescale,Time.deltaTime,Time.unscaledDeltaTime等)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

dockerfile制作-pytoch+深度学习环境版

你好你好! 以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 文档内容docker相关术语docker常用命令容器常用命令根据dockerfile创建容器dokerfile文件内容 docker问题:可能的原因和解决方法示例修改修改后的D…

C++笔记:命名空间

引入&#xff1a; 平常&#xff0c;我们在进行C编写时&#xff0c;一般我们都会默认在开始去写这样的代码&#xff1a; #include<iostream>//包含头文件using namespace std;//展开命名空间 这里就出现了与C语言不同的地方&#xff1a;这里的命名空间就是C对于C语言进…