首页 > 其他分享 >书生浦语第二期实战营——第二课_part1

书生浦语第二期实战营——第二课_part1

时间:2024-04-05 15:33:59浏览次数:21  
标签:第二课 hub root part1 download model hf 浦语 name

目录

正文
所有操作均在AI studio 开发机中实现
Intern Studio地址:https://studio.intern-ai.org.cn/

0 环境配置

  1. 流程:开发机创建——信息(name、cuda11.7、算力A100 *0.1)——进入
    在这里插入图片描述

  2. 选择终端,配置(studio-conda命令相当于本地使用的conda创建虚拟环境–>激活环境–>安装torch)

studio-conda -o internlm-base -t demo   # 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. 进入环境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

另一种是通过requirements.txt安装库,requirements.txt文件的内容:

huggingface-hub==0.17.3
transformers==4.34 
psutil==5.9.8
accelerate==0.24.1
streamlit==1.32.2 
matplotlib==3.8.3 
modelscope==1.9.5
sentencepiece==0.1.99

安装指令 pip install -r requirements.txt

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

1.1 课程内容:

(1)准备工作

环境配置,激活环境

(2) 代码流程

新建文件夹——在新建的文件夹内创建两个.py文件(cli_demo.py、download_mini.py)——进入新建的文件夹

mkdir -p /root/demo
cd /root/demo
touch cli_demo.py
touch download_mini.py

在这里插入图片描述

.py文件的内容

  • download_mini.py 内容如下:
# 通过modelscope 下载模型
import os
from modelscope.hub.snapshot_download import snapshot_download

# 创建保存模型目录
os.system("mkdir /root/models")  # 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')

通过控制台输入 python /root/demo/download_mini.py 运行

在这里插入图片描述

在这里插入图片描述

  • cli_demo.py 内容如下:

    运行demo,使用stream_chat接口

    import torch
    from transformers import AutoTokenizer, AutoModelForCausalLM
    
    # 基本配置——tokenizer、model
    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)
    
    
    AutoModelForCausalLM 是一个用于生成文本的语言模型,通常用于生成对话或文本序列。当你调用 model.stream_chat(tokenizer, input_text, messages) 时,其中的参数含义如下:
    
    tokenizer:用于将文本转换为模型可以理解的输入格式的分词器。
    input_text:用户提出的问题或输入的文本,作为对话的开始或初始内容。
    messages:一个包含对话历史的列表,通常是一个包含对话文本的元组列表。在这里,[(system_prompt, '')] 表示对话历史中只有一个系统提示(system_prompt),而没有用户消息。
    在模型内部的运作方式如下:
    
    输入处理:首先,将 input_text 和 messages 组合成一个完整的对话历史,这个对话历史将作为模型的输入。
    文本生成:模型接收对话历史作为输入,然后生成下一个可能的文本序列。在生成对话时,模型会根据前面的对话历史和系统提示来预测接下来的文本。
    循环生成:生成的文本可能会作为下一轮对话的一部分,然后再次输入模型中以生成更多文本。这个过程可以循环进行,模拟对话的连续性。
    总的来说,messages 参数用于提供对话历史,以帮助模型更好地理解上下文并生成连贯的对话。模型会根据这些历史消息和系统提示来生成接下来的文本,从而模拟对话的进行。
    

    激活环境运行:python /root/demo/cli_demo.py

    紧接着西游记大结局,请创作一个 300 字的小故事
    

在这里插入图片描述

1.2 课程作业

使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事(需截图)

过程如上所述,结果如下:

原本想让模型写一个西游记中师徒四人取得真经后的后续故事,但是感觉不太好,后来直接提问写一个300字的小故事 ,感觉还可以。发现这两种不同的提问方式,故事输出的排版也不相同,不知是否是训练数据造成的影响。

西游记后续小故事

2 部署 八戒-Chat-1.8B 模型

2.1 课程

(1)准备工作

  1. 激活环境

conda activate demo

  1. 克隆仓库内的 Demo 文件
cd /root/
git clone https://gitee.com/InternLM/Tutorial -b camp2
# git clone https://github.com/InternLM/Tutorial -b camp2
cd /root/Tutorial

这个命令的意思是从指定的 Gitee 存储库中克隆名为 camp2 的分支的代码到本地计算机。这将在本地创建一个名为 Tutorial 的文件夹,并将存储库中 camp2 分支的代码克隆到该文件夹中。

  1. 运行

    python /root/Tutorial/helloworld/bajie_download.py

(2)开启服务

  1. 服务指令,服务的端口号设置为6006。
    streamlit run /root/Tutorial/helloworld/bajie_chat.py --server.address 127.0.0.1 --server.port 6006

  2. ssh 映射到本地

step1:查看开发机器ssh的端口
step2:使用快捷键组合 Windows + R(Windows 即开始菜单键)打开PowerShell,并输入命令,按下回车键。

# 从本地使用 ssh 连接 studio 端口
# 将下方端口号 xxxx 替换成自己的端口号
ssh -CNg -L 6006:127.0.0.1:6006 [email protected] -p xxxx

ssh链接指令解释

by chatGPT

ssh -CNg -L 6006:127.0.0.1:6006 [email protected] -p xxxx

这串指令是一个 SSH 命令,用于建立一个 SSH 隧道(SSH tunnel)。让我解释一下这个命令的各个部分的含义:

- `ssh`: 这是用于启动 SSH 连接的命令。

- `-C`: 这是 SSH 的一个选项,用于开启压缩。 `-C` 选项会使用压缩算法来加速数据传输。

- `-N`: 这是 SSH 的另一个选项,表示不执行任何远程命令。这在你只需要建立 SSH 连接,而不需要在远程主机上执行任何命令时很有用。

- `-g`: 这个选项允许远程主机连接到本地端口转发的端口,这在你希望其他主机也能访问该隧道时很有用。

- `-L 6006:127.0.0.1:6006`: 这部分指定了本地端口转发。具体来说,它将本地主机的端口 6006 映射到远程主机的 127.0.0.1 地址(即远程主机本身)的端口 6006。这意味着当你连接到本地主机的端口 6006 时,实际上是连接到了远程主机的端口 6006。

- `[email protected]`: 这是远程主机的用户名和主机名。在这个例子中,用户名是 `root`,主机名是 `ssh.intern-ai.org.cn`。

- `-p xxxx`: 这个选项指定了 SSH 连接的端口号。在这里,SSH 连接将通过端口 xxxx 连接到远程主机。

综合起来,这个命令的作用是建立一个 SSH 隧道,将本地主机的端口 6006 映射到远程主机的端口 6006,允许通过本地端口访问远程主机上的服务或应用程序。

(3)本地对话

本地浏览器打开127.0.0.1:6006地址,进行对话。
在这里插入图片描述

2.2 作业

熟悉 huggingface 下载功能,使用 huggingface_hub python 包,下载 InternLM2-Chat-7Bconfig.json 文件到本地(需截图下载过程)

  1. 安装 huggingface_hub
pip install huggingface_hub
  1. snapshot_download hf_hub_download()hf_hub_urlhuggingface-cli等方式均可下载 InternLM2-Chat-7B 模型的 config.json 文件:

服务器更换了HF的镜像:https://hf-mirror.com/internlm/internlm2-chat-7b/resolve/main/config.json
snapshot_download hf_hub_download()下载都会嵌套几层路径,hf_hub_urlhuggingface-cli直接下载json文件。

详细脚本如下:

(1)snapshot_download

  • snapshot_download 过滤文件。文件位于*/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/目录下。
import os
from huggingface_hub import snapshot_download

# 指定模型 ID 和本地存放路径
model = "internlm/internlm2-chat-7b"  # HF模型位置
cache_dir = "./"  # 存放位置
file_name = "config.json"  # 过滤文件"*.json"


from huggingface_hub import snapshot_download
snapshot_download(repo_id=model, allow_patterns=file_name, cache_dir=cache_dir)
print("完成")

文件的位置在test/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/config.json

在这里插入图片描述
在这里插入图片描述

(2)hf_hub_download

  • hf_hub_download单个文件下载。文件位于*/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/目录下。

    from huggingface_hub import hf_hub_download
    
    hf_hub_download(repo_id="internlm/internlm2-chat-7b", cache_dir = "./model" , filename="config.json")
    print("下载完成!")
    

在这里插入图片描述
在这里插入图片描述

文件位置:test/model/models--internlm--internlm2-chat-7b/snapshots/4275caa205dbb8ff83930e2c1ce6bc62ec49329c/config.json

(3)hf_hub_url

  • hf_hub_url地址请求下载:文件存放的位置就是实际设置的位置
import os
import requests
from huggingface_hub import hf_hub_url

def download_model_to_folder(model_name, local_folder):
    # 确保本地文件夹存在
    os.makedirs(local_folder, exist_ok=True)

    # 指定要下载的文件名
    file_name = "config.json"

    # 构建下载链接
    url = hf_hub_url(model_name, filename=file_name)
    print(url)

    # 下载文件
    response = requests.get(url)
    if response.status_code == 200:
        file_path = os.path.join(local_folder, file_name)
        with open(file_path, 'wb') as f:
            f.write(response.content)
        print(f"文件 {file_name} 下载成功!")
    else:
        print(f"下载文件 {file_name} 失败。")

# 指定模型名称和本地文件夹路径
model_name = "internlm/internlm2-chat-7b"
local_folder = "./"

# 调用函数下载文件到指定文件夹
download_model_to_folder(model_name, local_folder)

(4)huggingface-cli

  • huggingface-cli 仅下载json文件。
import os

# os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"  # 设置为hf的国内镜像网站

os.system("huggingface-cli download --resume-download internlm/internlm2-chat-7b config.json --local-dir './' ")  # 相当于控制台输入指令
print("done!")
"""
resume-download:断点续下
文件名
local-dir:本地存储路径。
"""

标签:第二课,hub,root,part1,download,model,hf,浦语,name
From: https://blog.csdn.net/weixin_49374605/article/details/137399737

相关文章

  • 黑马点评part1 -- 短信登录
    目录 1.导入项目: 2.基于Session实现短信验证登录2.1原理 : 2.2发送短信验证码: 2.3短信验证码登录和验证功能:2.4登录验证功能2 .5隐藏用户敏感信息2.6session共享问题2.7Redis代替session2.8基于Redis实现短信登录UserSer......
  • 轻松玩转书生·浦语大模型趣味 Demo——day2笔记
    本节课有四个任务:学习部署、玩角色扮演的agent项目,玩数学运算agent、玩写作agent 主要学习过程就是跟着视频,复制学习文档里的资料,完成demo的使用。主要目的是熟悉开发平台。视频:轻松玩转书生·浦语大模型趣味Demo_哔哩哔哩_bilibili资料:Tutorial/helloworld/hello_world.......
  • 书生·浦语大模型趣味Demo课程笔记
    第二节书生·浦语大模型趣味Demo实践环境准备浦语大模型的开发机器支持了cuda11.7的基础环境和一些自动迁移conda配置脚本迁移conda环境命令:studio-conda-ointernlm-base-tdemo如果自己安装软件环境:condacreate-ndemopython==3.10-ycondaactivatedemoconda......
  • 书生浦语第二期第二节课笔记(轻松玩转书生·浦语大模型趣味 Demo)
    以下内容是在InternStudio的开发机上运行的一、部署 InternLM2-Chat-1.8B 模型进行智能对话第一步:进入开发机后,在终端中输入以下环境命令配置进行环境配置studio-conda-ointernlm-base-tdemo#与studio-conda等效的配置方案#condacreate-ndemopython==3.10-......
  • [附源码]JAVA计算机毕业设计第二课堂选课系统(源码+开题)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,计算机技术在教育领域的应用日益广泛。传统的选课方式已经无法满足高校日益增长的教学需求和学生个性化发展的要求。第二课堂......
  • 第二期书生浦语大模型实战营第一次作业(大模型技术报告解读)
    书生·浦语大模型全链路开源体系上海人工智能实验室与商汤科技联合香港中文大学、复旦大学发布新一代大语言模型书生·浦语2.0(InternLM2)。这个大模型包含70亿和200亿两种参数规格,以及基座、对话等版本,向全社会开源并提供免费商用授权。书生·浦语2.0(英文名:InternLM2)核心理念:......
  • 轻松分钟玩转书生·浦语大模型趣味 Demo
    一、基础作业:使用InternLM2-Chat-1.8B模型生成300字的小故事:使用猪猪模型部署并访问:二、进阶作业:完成Lagent工具调用数据分析Demo部署:熟悉huggingface下载功能,使用huggingface_hubpython包,下载InternLM2-Chat-7B的config.json文件到本地:......
  • 书生浦语LLM全链路开源体系笔记
    书生浦语LLM全链路开源体系LLM介绍大模型LLM成为发展通用人工智能的重要途径。专用模型:针对特定人物,一个模型解决一个问题;通用大模型:一个模型应对多种任务、多种模态。书生浦语LLM发展历程及LM2InternLM->InternLM-7B开源+全链路开源工具体系->书生万卷1.0多模......
  • InternLM2 Demo初体验-书生浦语大模型实战营学习笔记2
    本文包括第二期实战营的第2课内容。本来是想给官方教程做做补充的,没想到官方教程的质量还是相当高的,跟着一步一步做基本上没啥坑。所以这篇笔记主要是拆解一下InternStudio封装的一些东西,防止在本地复现时出现各种问题。搭建环境首先是搭建环境这里,官方教程说:进入开发机后,在`t......
  • [InternLM训练营第二期笔记]1. 书生·浦语大模型全链路开源开放体系
    由于想学习一下LLM相关的知识,真好看到上海AILab举行的InternLM训练营,可以提高对于LLM的动手能力。每次课堂都要求笔记,因此我就想在我的CSDN上更新一下,希望和感兴趣的同学共同学习~本次笔记是第一节课,介绍课。课程视频:BilibiliInternLM2Technicalreport:arxiv1.......