[InternLM训练营第二期笔记]2. 轻松分钟玩转书生·浦语大模型趣味 Demo


该系列是上海AI Lab举行的书生 浦语大模型训练营的相关笔记部分。
该笔记是第二节课,完成对话、多模态等demo,形成对InternLM的初步了解


1. 部署InternLM2-Chat-1.8B

InternLM2-Chat-1.8B是一个对话小模型,只有1.8B参数,因此运行只需要10%的A100即可。

首先在官方提供的开发机页面(https://studio.intern-ai.org.cn/console/dashboard)配置环境,选择10% * A100。

随后,进行初步的环境配置:

studio-conda -o internlm-base -t demo

正在配置环境是这样子的:
在这里插入图片描述
完成后,我们需要安装一下其他的包:

## 进入环境
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

安装完成后,我们需要创建文件夹,然后把模型下载下来

mkdir -p /root/demo
touch /root/demo/cli_demo.py  # 创建文件 一会填充代码
touch /root/demo/download_mini.py  # 创建文件 一会填充代码
cd /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')

上面代码的作用就是从模型库中下载代码

然后打开另一个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)

上面这段代码的作用是加载模型,并给定prompt以让模型扮演某个角色。对于每次对话,都必须传一遍prompt。

之后,我们依次运行上面两个文件。

首先,我们下载模型:

python /root/demo/download_mini.py

耐心等待即可

在这里插入图片描述

下载完成后,我们运行cli_demo.py,就可以开始对话

python /root/demo/cli_demo.py

我输入了提示词:请写一个300字左右的温情小故事

结果:
在这里插入图片描述
可以看到效果还是不错的,确实比较温情。按照程序的设计,可以输入exit退出。

2. 尝试训练营第一期优秀作品~Chat-嬛嬛

官方文档上讲了八戒的chat,所以在此就不赘述,我来尝试一下嬛嬛的模型。

首先,安装包(在刚刚的demo/文件夹下操作即可):

pip install modelscope

然后下载模型权重:

from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('kmno4zx/huanhuan-chat-internlm2', cache_dir='./')

下载好的权重如下:

在这里插入图片描述

随后,git clone代码库:

git clone https://github.com/KMnO4-zx/xlab-huanhuan.git

随后,我们打开工程内的start.py,并修改为以下内容:(按照原本的端口和ip 不work)

import osos.system('streamlit run app.py --server.address=127.0.0.1 --server.port 6006')

之后,在本地配置ssh,在windows powershell中输入

ssh -CNg -L 6006:127.0.0.1:6006 root@ssh.intern-ai.org.cn -p 41104

其中p换成开发机的端口号

运行start.py, 然后在浏览器进入http://127.0.0.1:6006/即可:
在这里插入图片描述

3. 使用 Lagent 运行 InternLM2-Chat-7B 模型

Lagent是一个工具,其可以快速将LLM变成用户需要的智能体,整体框图如下:

在这里插入图片描述

调整开发机环境为30% * A100,然后在前文构建的虚拟环境下执行以下命令:

cd /root/demogit 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 . # 源码安装

Intern Studio 在 share 文件中预留了一些我们可以用到的模型,因此我们先用一个软链接,将本地模型链接到share里:

cd /root/demo/lagent
ln -s /root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-7b /root/models/internlm2-chat-7b

打开 lagent 路径下 examples/internlm2_agent_web_demo_hf.py 文件,并修改对应位置 (71行左右) 代码,将路径指向/root/models/internlm2-chat-7b
在这里插入图片描述

剩余的事情和部署前面的嬛嬛一样,需要先在服务器上运行,然后本地与服务器用ssh链接:

streamlit run /root/demo/lagent/examples/internlm2_agent_web_demo_hf.py --server.address 127.0.0.1 --server.port 6006

结果如下图:
在这里插入图片描述
然后我指定它用matlab写,但是它还是用python,可能创建智能体的时候没有这个约束。。

在这里插入图片描述

进阶作业:熟悉hugging_face的下载功能

lagent文件夹下新建download_config.py,填入以下代码:

## huggingface_hub包使用示例
from huggingface_hub import hf_hub_download
hf_hub_download(repo_id='internlm/internlm2-chat-7b',filename="config.json",local_dir='/root/demo/lagent')

运行即可,得到的config.json:

在这里插入图片描述

4. 体验多模态浦语·灵笔2模型

按照以下命令,分别安装依赖的package和创建模型软链接等操作:


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.5cd /root/demo
git clone https://gitee.com/internlm/InternLM-XComposer.git
cd /root/demo/InternLM-XComposer
git checkout f31220eddca2cf6246ee2ddf8e375a40457ff626ln -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-7bcd /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

然后根据前面的ssh连接教程,即可打开demo界面。
由于算力有限,这部分还没更新。

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

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

相关文章

【算法刷题day15】Leetcode:各种层序遍历、226.翻转二叉树、101. 对称二叉树

文章目录 Leetcode 层序遍历解题思路代码总结 Leetcode 226.翻转二叉树解题思路代码总结 Leetcode 101. 对称二叉树解题思路代码总结 草稿图网站 java的Deque Leetcode 层序遍历 题目:102.二叉树的层序遍历 题目:107. 二叉树的层序遍历 II 题目&#xf…

深度学习:神经网络模型的剪枝和压缩简述

深度学习的神经网路的剪枝和压缩,大致的简述, 主要采用: network slimming,瘦身网络... 深度学习网络,压缩的主要方式: 1.剪枝,nerwork pruing, 2.稀疏表示,sparse rep…

【Git】分支协同开发

1、前言 由于之前一直是在master上开发 没有分支开发过 接触过好几个项目组 远程仓库不是用码云就是 gitlab 然后几个人在master开发 也没有UAT分支这些 没有分支协同开发很容易把冲突 读完本文 你将对Git分支开发又有一个新的认识 2、概念 master和UAT在远程都是保护分支…

每日面经分享(python进阶 part2)

Python中的装饰器和上下文管理器区别是什么?它们分别适用于哪些场景? a. 装饰器用于在函数或类的外部添加额外功能,而上下文管理器用于管理资源的获取和释放。 b. 装饰器是一种用于修改函数或类行为的技术。适用于需要在函数或类的外部添加额…

鸿蒙实战开发-通过输入法框架实现自绘编辑框

介绍 本示例通过输入法框架实现自会编辑框,可以绑定输入法应用,从输入法应用输入内容,显示和隐藏输入法。 效果预览 使用说明 1.点击编辑框可以绑定并拉起输入法,可以从输入法键盘输入内容到编辑框。 2.可以点击attach/dettac…

【学习分享】小白写算法之冒泡排序篇

【学习分享】小白写算法之冒泡排序篇 前言一、什么是冒泡排序算法二、冒泡排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 最近我要学习下数据结构和算法,有兴趣的小伙伴可以点个关注,一起学习。争取写的浅显易懂。如果你…

解决Toad for Oracle显示乱中文码问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

数据结构记录

之前记录的数据结构笔记,不过图片显示不了了 数据结构与算法(C版) 1、绪论 1.1、数据结构的研究内容 一般应用步骤:分析问题,提取操作对象,分析操作对象之间的关系,建立数学模型。 1.2、基本概念和术语 数据&…

CANoe自带的TCP/IP协议栈中TCP的keep alive机制是如何工作的

TCP keep alive机制我们已经讲过太多次,车内很多控制器的TCP keep alive机制相信很多开发和测试的人也配置或者测试过。我们今天想知道CANoe软件自带的TCP/IP协议栈中TCP keep alive机制是如何工作的。 首先大家需要知道TCP keep alive的参数有哪些?其实就三个参数:CP_KEEP…

Qt QML的枚举浅用

QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的,C的枚举定义方法 序言 概念 QML的枚举和C的其实差不多,但是呢,局限比较多,首先不能在main.qml里定义,也不能在子项中定义。 …

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

【前端开发】教程及案例.docx

Web前端开发是创建网页或APP界面呈现给用户的过程&#xff0c;涉及的技术主要包括HTML、CSS、JavaScript、JQuery等&#xff0c;以及衍生出来的各种技术和框架。以下是一些前端开发教程和案例的资源&#xff0c;可以帮助你从基础到高级逐步学习前端开发技术。 ### 在线课程资源…

MySQL的基本操作(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 &#x1f4d4;&#xff08;零基础&#xff09;专栏&#xff1a;MSQL数据库 欢迎&#x1f64f;点赞&…

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1&#xff1a;运行查看有什么可以快捷使用的&#xff0c;更新了些什么&#xff0c;可不可以直接复制粘贴 主要内容&#xff1a;在web端中模拟手机类型的点击长按操作&#xff0c;不能直接运行在安卓与io…

数字化时代应该具备的能力

随着科技的飞速发展&#xff0c;我们正身处一个数字化的时代。在这个信息爆炸的时代&#xff0c;拥有某些关键能力变得尤为重要。以下是我认为在数字化时代&#xff0c;人人必备的五大能力&#xff1a; 1. 信息素养&#xff1a;在数字化时代&#xff0c;信息素养是一种基础能力…

如何处理Jenkins打包npm install没有拉取到最新依赖的问题

问题背景&#xff1a; 我们项目中有私有依赖包 frame&#xff0c;是私有服务器上通过 npm 去管理。frame包 publish 之后&#xff0c;通过Jenkins打包时&#xff0c;npm install 一直没有拉取最新的代码。 思考&#xff1a;通过在本地直接替换 node_modules 里的 frame 包&…

element-ui divider 组件源码分享

今日简单分享 divider 组件&#xff0c;主要有以下两个方面&#xff1a; 1、divider 组件页面结构 2、divider 组件属性 一、组件页面结构 二、组件属性 2.1 direction 属性&#xff0c;设置分割线方向&#xff0c;类型 string&#xff0c;horizontal / vertical&#xff0…

SQLite下一代查询规划器(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 查询优化器概述&#xff08;九&#xff09; 下一篇&#xff1a;SQLite的架构&#xff08;十一&#xff09; 1. 引言 “查询规划器”的任务是弄清楚 找出完成 SQL 语句的最佳算法或“查询计划”。 从 SQLi…

VS2013报错The request was aborted: Could not create SSL/TLS secure channel.

问题描述 Visual Studio 2013 Nuget&#xff08;扩展和更新&#xff09;无法连接网络分析和解决方法A connection to the server could not be established because the following error(s) occurred&#xff1a; The request was aborted: Could not create SSL/TLS secure ch…

NLP学习路线指南总结

当然可以&#xff0c;以下是一份较为详细的NLP学习路线指南&#xff0c;帮助你逐步掌握自然语言处理的核心技术和应用。 一、基础知识与技能 语言学基础&#xff1a; 语言学基本概念&#xff1a;语音、语法、语义等。语言的层次与分类&#xff1a;语音学、音系学、句法学、语…