书生·浦语训练营二期第二次笔记
文章目录
- 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话
- 1.1 配置环境
- 1.2 下载 InternLM2-Chat-1.8B 模型
 
- 2. 实战:部署实战营优秀作品 八戒-Chat-1.8B 模型
- 2.1 配置基础环境
- 2.2 使用 git 命令来获得仓库内的 Demo 文件:
- 2.3 下载运行 Chat-八戒 Demo
 
- 3. 使用 Lagent 运行 InternLM2-Chat-7B 模型
- 4. 使用 Lagent 运行 InternLM2-Chat-7B 模型为内核的智能体
- 5. 实践部署 浦语·灵笔2 模型
- 5.1 配置基础环境
- 5.2 图文写作实战
- 5.3 图片理解实战
 
- 教程文档:https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md
- 智能体lagent repo: https://github.com/InternLM/lagent
多模态大模型InternLM-XComposerhttps://github.com/InternLM/InternLM-XComposer/tree/main- 轻松玩转书生·浦语大模型趣味 Demo
1. 部署 InternLM2-Chat-1.8B 模型进行智能对话
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

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

- 输入以下命令,完成环境包的安装:
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 模型
- 按路径创建文件夹,并进入到对应文件目录中:
mkdir -p /root/demo
touch /root/demo/cli_demo.py
touch /root/demo/download_mini.py
cd /root/demo
这里的
touch命令用于创建两个空的Python文件:cli_demo.py和download_mini.py。如果这些文件已经存在,touch命令不会更改它们的内容,只会更新时间戳。
touch命令通常用于:
- 创建空文件
- 更新文件的时间戳(访问时间和修改时间)
- 避免在脚本或Makefile中创建文件时出现"文件不存在"的错误
通过左侧文件夹栏目,双击进入demo文件夹。
- 双击打开 /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, AutoModelForCausalLMmodel_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":breaklength = 0for 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代码。
加载分词器和模型:
tokenizer = AutoTokenizer.from_pretrained(...): 加载与模型相对应的分词器。
model = AutoModelForCausalLM.from_pretrained(...): 加载语言模型,使用bfloat16数据类型,并指定设备为cuda:0。
model = model.eval(): 将模型设置为评估模式。
定义系统提示:
system_prompt = """...""": 定义一个系统提示,介绍 InternLM 助手的基本信息。
初始化消息列表:
messages = [(system_prompt, '')]: 将系统提示添加到消息列表中。
开始交互循环:
while True: 进入无限循环,直到用户输入 “exit” 时退出。
input_text = input("\nUser >>> "): 提示用户输入问题。
input_text = input_text.replace(' ', ''): 去除输入文本中的空格。
生成助手的响应:
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

2. 实战:部署实战营优秀作品 八戒-Chat-1.8B 模型
2.1 配置基础环境
运行环境命令:
conda activate demo
2.2 使用 git 命令来获得仓库内的 Demo 文件:
cd /root/
git clone https://gitee.com/InternLM/Tutorial -b camp2
# git clone https://github.com/InternLM/Tutorial -b camp2
cd /root/Tutorial

2.3 下载运行 Chat-八戒 Demo
在 Web IDE 中执行 bajie_download.py:
python /root/Tutorial/helloworld/bajie_download.py
可以看到这部分代码的作用是下载模型权重
 
 
 待程序下载完成后,输入运行命令:
streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006
- 这条命令的意思是:使用Streamlit运行位于
/root/Tutorial/helloworld/bajie_chat.py的Python脚本作为web应用,并且仅允许从运行该命令的本地机器访问此应用,通过端口号6006进行访问。

 查询开发机端口是40637
 
# 从本地使用 ssh 连接 studio 端口
# 将下方端口号 38374 替换成自己的端口号
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 40637
命令
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 38374是使用SSH协议创建一个安全的隧道,用于将本地计算机的端口转发到远程服务器或从远程服务器转发到本地。这里的命令可以分解为几个部分,每个部分的作用如下:
ssh:这是Secure Shell(SSH)的命令行接口,用于安全地访问远程服务器。
-C:这个选项会启用压缩,可以加快传输速度。
-Ng:-N表示不执行远程命令,只进行端口转发;-g允许远程主机连接到本地转发的端口,通常出于安全考虑不推荐开启。
-L 6006:127.0.0.1:6006:这是本地端口转发的参数。-L表示本地端口转发,格式为本地端口:远程地址:远程端口。这里将本地的6006端口转发到远程主机(ssh.intern-ai.org.cn)上的127.0.0.1地址的6006端口。简单来说,通过本地6006端口访问的所有数据都会发送到远程服务器的6006端口。
root@ssh.intern-ai.org.cn:这部分指定了要连接的远程服务器和用户。这里使用root用户连接到ssh.intern-ai.org.cn。
-p 38374:指定连接远程服务器时使用的端口号。这里是38374。总之,这条命令的作用是:在不执行任何远程命令的情况下,将本地机器的
6006端口转发到远程服务器ssh.intern-ai.org.cn的6006端口,通过38374端口建立安全的SSH连接。这样,本地机器上运行的应用(比如Streamlit应用)就可以通过远程服务器访问,实现了一种安全的端口转发。

我为什么运行了这行命令后ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 40637
等了很久命令行都没反应?
答:
命令行没有反应是预期行为,这意味着SSH隧道已经成功建立并在后台运行。这条命令的作用是创建一个SSH隧道,通过端口转发将本地的6006端口映射到远程服务器上的6006端口,且该命令是在后台执行的。
因为使用了-N选项,所以SSH客户端不会打开一个远程shell,命令执行后不会有任何输出表明命令正在执行。它只是静静地在后台运行,等待通过端口转发的数据。这正是你所观察到的“没有反应”的原因。
使用隧道访问(通过浏览器访问http://127.0.0.1:6006)看是否能够成功连接到通过隧道映射的服务。

3. 使用 Lagent 运行 InternLM2-Chat-7B 模型
输入命令,开启 conda 环境:
conda activate demo
打开文件子路径
cd /root/demo
使用 git 命令下载 Lagent 相关的代码库:
git clone https://gitee.com/internlm/lagent.git
# git clone https://github.com/internlm/lagent.git
cd /root/demo/lagent
git checkout 581d9fb8987a5d9b72bb9ebd37a95efd47d479ac
pip install -e . # 源码安装
运行效果如图:
 
4. 使用 Lagent 运行 InternLM2-Chat-7B 模型为内核的智能体
- 打开 lagent 路径:
cd /root/demo/lagent
在 terminal 中输入指令,构造软链接快捷访问方式:
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b
使用了ln命令的-s选项来创建一个符号链接(类似于Windows中的快捷方式)。它会在
/root/models/internlm2-chat-7b位置创建一个指向/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b的符号链接。这意味着,当访问/root/models/internlm2-chat-7b时,实际上会被重定向到/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b。
打开 lagent 路径下 examples/internlm2_agent_web_demo_hf.py 文件,并修改对应位置 (71行左右) 代码:
# 其他代码...
value='/root/models/internlm2-chat-7b'
# 其他代码...
输入运行命令 - 点开 6006 链接后,大约需要 5 分钟完成模型加载:
streamlit run /root/demo/lagent/examples/internlm2_agent_web_demo_hf.py --server.address 127.0.0.1 --server.port 6006
mac在命令行输入
# 从本地使用 ssh 连接 studio 端口
# 将下方端口号 38374 替换成自己的端口号
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 40637
访问127.0.0.1等待加载模型:
 
 表现还不错哦。
 
5. 实践部署 浦语·灵笔2 模型
5.1 配置基础环境
选用 50% A100 进行开发:
 进入开发机,启动 conda 环境:
conda activate demo
# 补充环境包
pip install timm==0.4.12 sentencepiece==0.1.99 markdown2==2.4.10 xlsxwriter==3.1.2 gradio==4.13.0 modelscope==1.9.5
下载 InternLM-XComposer 仓库 相关的代码资源:
cd /root/demo
git clone https://gitee.com/internlm/InternLM-XComposer.git
# git clone https://github.com/internlm/InternLM-XComposer.git
cd /root/demo/InternLM-XComposer
git checkout f31220eddca2cf6246ee2ddf8e375a40457ff626

在 terminal 中输入指令,构造软链接快捷访问方式:
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-7b /root/models/internlm-xcomposer2-7b
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm-xcomposer2-vl-7b /root/models/internlm-xcomposer2-vl-7b
5.2 图文写作实战
继续输入指令,用于启动 InternLM-XComposer:
cd /root/demo/InternLM-XComposer
python /root/demo/InternLM-XComposer/examples/gradio_demo_composition.py  \
--code_path /root/models/internlm-xcomposer2-7b \
--private \
--num_gpus 1 \
--port 6006
mac打开端口映射:
# 从本地使用 ssh 连接 studio 端口
# 将下方端口号 38374 替换成自己的端口号
ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 38374

 显存占用记录:
 
 控制台输出记录:
 
 
 
 先生成文章,再插入和下载图片。
 
 
 
 
 
插入的图片是从互联网中下载的。见上一期测试记录:https://blog.csdn.net/qq_37397652/article/details/135540633
5.3 图片理解实战
关闭并重新启动一个新的 terminal,继续输入指令,启动 InternLM-XComposer2-vl:
conda activate democd /root/demo/InternLM-XComposer
python /root/demo/InternLM-XComposer/examples/gradio_demo_chat.py  \
--code_path /root/models/internlm-xcomposer2-vl-7b \
--private \
--num_gpus 1 \
--port 6006
打开 http://127.0.0.1:6006 (上传图片后) 键入内容示例如下:
- 图片内容理解的非常好,虽然交规知识的答案解答错了。
  
  
- 图片理解的很好,有上下文记忆,答案也接近正确答案。
  
  
相关文章:
 
书生·浦语训练营二期第二次笔记
文章目录 1. 部署 InternLM2-Chat-1.8B 模型进行智能对话1.1 配置环境1.2 下载 InternLM2-Chat-1.8B 模型 2. 实战:部署实战营优秀作品 八戒-Chat-1.8B 模型2.1 配置基础环境2.2 使用 git 命令来获得仓库内的 Demo 文件:2.3 下载运行 Chat-八戒 Demo 3. …...
 
python_3
文章目录 题目运行结果模式A模式B模式C模式D 题目 mode input("请选择模式:") n int(input("请输入数字:"))if mode "A" or mode "a":# 模式A n:输入的层数 i:当前的层数# 每行数字循环次数 ifor i in range(1, n 1):for j in r…...
【Python】 使用Apache Tika和Python实现zip、csv、xls等多格式文件文本内容提取
时间的电影 结局才知道 原来大人已没有童谣 最后的叮咛 最后的拥抱 我们红着眼笑 我们都要把自己照顾好 好到遗憾无法打扰 好好的生活 好好的变老 好好假装我 已经把你忘掉 🎵 五月天《好好》 在进行数据分析、搜索引擎优化或任何需要处理大量…...
C语言如何将多维数组名作为函数参数?
一、问题 ⼦函数执⾏时,整个多维数组是由主函数决定的,这时就要把多维数组的数组名作为函数参数传递给⼦函数。那么在C程序中,怎样将多维数组名作函数参数进⾏传递? 二、解答 以⼆维数组为例,其格式如下。 形参定义&…...
 
2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序
2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现: 交通运输作为国民经济的载体,沟通生产和消费,在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系,生产水平越高…...
《LeetCode力扣练习》代码随想录——二叉树(合并二叉树---Java)
《LeetCode力扣练习》代码随想录——二叉树(合并二叉树—Java) 刷题思路来源于 代码随想录 617. 合并二叉树 二叉树-前序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode…...
 
openstack云计算(二)——使用Packstack安装器安装一体化OpenStack云平台
初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 一【准备阶段】 (1)准备一台能够安装OpenStack的实验用计算机,建议使用VMware虚拟机。 (2)该计算机应安装CentOS 7,建议采用CentO…...
 
Flutter Don‘t use ‘BuildContext‘s across async gaps.
Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性...
 
基于SSM+Jsp+Mysql的个性化影片推荐系统
开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…...
 
循环队列的实现及应用——桶排序bucket_sort、基数排序radix_sort
一、循环队列的实现 代码解释 1、完成初始化 2、定义方法 3、测试实例 4、完整代码 class AQueue:def __init__(self, size=10):self.__mSize = sizeself.__front=0self.__rear = 0self.__listArray = [None] * size#清空元素def clear(self):self.__front = 0self.__rear =…...
 
ubuntu16如何使用高版本cmake
1.引言 最近在尝试ubuntu16.04下编译开源项目vsome,发现使用apt命令默认安装cmake的的版本太低。如下 最终得知,ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…...
 
电商-广告投放效果分析(KMeans聚类、数据分析-pyhton数据分析
电商-广告投放效果分析(KMeans聚类、数据分析) 文章目录 电商-广告投放效果分析(KMeans聚类、数据分析)项目介绍数据数据维度概况数据13个维度介绍 导入库,加载数据数据审查相关性分析数据处理建立模型聚类结果特征分析…...
 
练习 16 Web [极客大挑战 2019]LoveSQL
extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入,注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码,返回了一个“admin的密码”: Hello admin! Your password is…...
 
C++——栈和队列容器
前言:这篇文章我们将栈和队列两个容器放在一起进行分享,因为这两个要分享的知识较少,而且两者在结构上有很多相似之处,比如栈只能在栈顶操作,队列只能在队头和队尾操作。 不同于前边所分享的三种容器,这篇…...
 
Java集合(个人整理笔记)
目录 1. 常见的集合有哪些? 2. 线程安全的集合有哪些?线程不安全的呢? 3. Arraylist与 LinkedList 异同点? 4. ArrayList 与 Vector 区别? 5. Array 和 ArrayList 有什么区别?什么时候该应 Array而不是…...
 
Redis -- 缓存穿透问题解决思路
缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种: 缓存空对象 优点:实现简单,维护方便 缺点: 额外…...
 
数据挖掘中的PCA和KMeans:Airbnb房源案例研究
目录 一、PCA简介 二、数据集概览 三、数据预处理步骤 四、PCA申请 五、KMeans 聚类 六、PCA成分分析 七、逆变换 八、质心分析 九、结论 十、深入探究 10.1 第 1 步:确定 PCA 组件的最佳数量 10.2 第 2 步:使用 9 个组件重做 PCA 10.3 解释 PCA 加载和特…...
 
【ArcGIS微课1000例】0107:ArcGIS加载在线历史影像服务WMTS
文章目录 一、WMTS历史影像介绍二、ArcGIS加载WMTS服务三、Globalmapper加载WMTS服务一、WMTS历史影像介绍 通过访问历史影响WMTS服务,可以将全球范围内历史影像加载进来,如下所示: WMTS服务: https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WM…...
 
IP归属地在互联网行业中的应用
摘要:IP(Internet Protocol)地址归属地是指互联网上某个IP地址所对应的地理位置信息。在互联网行业中,IP归属地具有重要的应用价值,包括网络安全、广告定向、用户定位等方面。IP数据云将探讨IP归属地在互联网行业中的应…...
 
非关系型数据库-----------探索 Redis高可用 、持久化、性能管理
目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
 
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
 
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
 
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
 
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
 
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
 
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
 
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
