L0G4-玩转HF/魔搭/魔乐社区
1. Hugging Face平台
1.1 任务一 模型下载
1.1.1 创建github codespace
访问github codespace,并使用Jupyter Notebook模板。
创建完成后,进入“Create frome a template”页面
对已经创建的codespace选择“open in visual studio code”
点击后会经过登录、验证等步骤,已经一段时间的加载后,就可以在本地的vscode中访问codespacel了。
1.1.2 安装必须的依赖
# 安装transformers
pip install transformers==4.38
pip install sentencepiece==0.1.99
pip install einops==0.8.0
pip install protobuf==5.27.2
pip install accelerate==0.33.0
1.1.3 下载internlm2_5-7b-chat的配置文件
hugging face上该模型的文件列表
我们要下载的就是以下这两个文件
这里我们采用huggingface_hub库中的hf_hub_download来下载。
首先新建一个hf_download_jsonn.py文件,并写入以下代码:
import os
from huggingface_hub import hf_hub_download# 指定模型标识符
repo_id = "internlm/internlm2_5-7b"# 指定要下载的文件列表
files_to_download = [{"filename": "config.json"},{"filename": "model.safetensors.index.json"}
]# 创建一个目录来存放下载的文件
local_dir = f"{repo_id.split('/')[1]}"
os.makedirs(local_dir, exist_ok=True)# 遍历文件列表并下载每个文件
for file_info in files_to_download:file_path = hf_hub_download(repo_id=repo_id,filename=file_info["filename"],local_dir=local_dir)print(f"{file_info['filename']} file downloaded to: {file_path}")
运行代码:
文件下载成功:
1.1.4 下载internlm2_5-chat-1_8b并打印示例输出
新建一个Python文件并运行:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
'''
这里使用 AutoTokenizer 和 AutoModelForCausalLM 从 Hugging Face 上下载一个名为 internlm/internlm2_5-1_8b 的预训练模型及其分词器。
trust_remote_code=True 表示信任远程代码执行,允许加载模型的自定义代码。
torch_dtype=torch.float16 将模型加载为半精度浮点数(减少内存占用)。
model.eval() 将模型切换到评估模式,这通常是在生成文本时使用的。
'''
tokenizer = AutoTokenizer.from_pretrained("internlm/internlm2_5-1_8b", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("internlm/internlm2_5-1_8b", torch_dtype=torch.float16, trust_remote_code=True)
model = model.eval()# tokenizer(["A beautiful flower"], return_tensors="pt") 会将输入文本(这里是 “A beautiful flower”)转换为模型可以理解的张量形式(PyTorch 张量)。
inputs = tokenizer(["A beautiful flower"], return_tensors="pt")
# 设置生成文本的参数
'''
max_length=128:生成文本的最大长度为 128 个 token。
top_p=0.8:nucleus sampling(核心采样),限制生成时选择概率累计达到 0.8 的词汇。即,模型只从概率较高的词中选择,帮助控制生成的多样性。
temperature=0.8:温度系数,控制生成的随机性。温度较低时生成的文本更有确定性,较高时则更随机。
do_sample=True:启用采样,而非使用贪心算法(即每次选择最大概率的词)。
repetition_penalty=1.0:防止生成重复的文本,较大的值可以减少重复。
'''
gen_kwargs = {"max_length": 128,"top_p": 0.8,"temperature": 0.8,"do_sample": True,"repetition_penalty": 1.0
}# model.generate() 是生成文本的核心函数。它将 inputs 和 gen_kwargs 传递给模型,生成指定条件下的文本。
output = model.generate(**inputs, **gen_kwargs) # 将字典的键值对自动解包并传递给 model.generate() 函数作为关键字参数
'''
output[0].tolist() 将模型生成的 token 序列转换为列表。
tokenizer.decode() 将 token 序列解码回原始文本。skip_special_tokens=True 表示跳过特殊字符(如 <s> 或 </s>)。
最后打印生成的文本。
'''
output = tokenizer.decode(output[0].tolist(), skip_special_tokens=True)
print(output)
这段代码的作用是:
- 从Hugging Face上下载一个语言模型(
internlm/internlm2_5-1_8b
)。 - 将输入文本(“A beautiful flower”)编码为模型的输入格式。
- 配置生成文本的参数(如最大长度、随机性等)。
- 使用模型生成与输入相关的文本。
- 解码并打印生成的文本。
github codespace的服务器下载速度相当可观,可以达到42MB/s
这里有个知识,当我们ssh到开发机上下载库时,默认使用的是开发机服务器的网络,而不是本地的网络。如果想让远程服务器(开发机)的网络流量通过本地机器出去,即让远程服务器“借用”你的本地网络,可以尝试ssh反向代理(目前在internlm开发机上没有成功)。
模型输出结果如下:
1.1.5 Hugging Face Spaces的使用
通过Hugging Face Spaces,开发者可以快速将模型部署为可交互的 web 应用,且无需担心后端基础设施或部署的复杂性。
hugging face spaces地址
在右上角点击+New Space进行创建,然后输入space的信息,点击确定即可创建完成。
space项目地址
在下图位置找到git命令,将space项目克隆到本地仓库。
在本地目录中找到该目录文件夹下的index.html文件,修改html代码。
然后保存(保存前要先获取access tokens,否则无法git push):
git add .
git commit -m "update: colearn page"
git push
保存后就可以push到远程仓库上了,它会自动更新页面。
命令运行结果:
app更新如下:
1.2 任务二 模型上传
1.2.1 安装git lfs和hugging face命令行工具
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# sudo apt-get install git-lfs # CodeSpace里面可能会有aptkey冲突且没有足够权限
git lfs install # 直接在git环境下配置git LFS
pip install huggingface_hub
运行结果如下:
1.2.2 获取hugging face的Access Tokens
首先到hugging face个人信息设置,点击Access Tokens
完成验证后,点击create new token,创建一个类型为“Write”的token,并请复制好token后要存储在合适的地方
1.2.3 用huggingface-cli登录
接着可以在CodeSpace里面,使用
git config --global credential.helper store
huggingface-cli login
注意,这里token会被保存到本地。
1.2.4 用huggingface-cli创建项目并克隆项目仓库到本地
cd /workspaces/codespaces-jupyter#intern_study_L0_4就是model_name
huggingface-cli repo create intern_study_L0_4# 克隆到本地 your_huggingface_name 注意替换成你自己的
git clone https://huggingface.co/{your_huggingface_name}/intern_study_L0_4
命令行创建项目后,hugging face的个人主页中立刻就可以展示出来。
按照创建项目的命令的输出提示,克隆项目到本地:
克隆好之后,刷新文件目录可以看到克隆好的intern_study_L0_4
文件夹。
在intern_study_L0_4
文件夹中创建项目文件如下:
现在可以用git提交到远程仓库。
cd intern_study_L0_4
git add .
git commit -m "add:intern_study_L0_4"
git push
运行结果如下:
1.2.5 在网页端查看model
model仓库地址
2. 魔搭社区平台
魔搭平台链接
2.1 环境配置
激活开发机中预装的pytorch2.1.2cu12.1
环境,并安装一些包。
# 激活环境
conda activate /root/share/pre_envs/pytorch2.1.2cu12.1# 安装 modelscope
pip install modelscope -t /root/env/maas
pip install numpy==1.26.0 -t /root/env/maas
pip install packaging -t /root/env/maas
注意:为了保证能够找到我们每次装的依赖,每次新建一个终端之后都需要导出path 如果不改变终端,导出一次就够了。
export PATH=$PATH:/root/env/maas/bin
export PYTHONPATH=/root/env/maas:$PYTHONPATH
接着创建我们的demo目录
mkdir -p /root/ms_demo
2.2 下载指定多个文件
使用modelscope的cli工具下载模型文件:
modelscope download \--model 'Shanghai_AI_Laboratory/internlm2_5-7b-chat' \tokenizer.json config.json model.safetensors.index.json \--local_dir '/root/ms_demo'
下载完成:
2.3 上传模型
首先在平台上创建模型:
填写模型基本信息:
创建完成,模型地址
用git将模型克隆到本地
git clone https://www.modelscope.cn/sakuralggm/intern_study_L0_4.git
克隆成功:
将刚刚2.2中下载的模型文件复制到这个目录中。
用git工作流将本地仓库的更改推送到远程仓库:
注意git push
时需要输出用户名和密码,密码在设置中找到git 访问令牌复制填写即可。
上传结果如下(目前还是待审核状态):