下载HuggingFace大模型上传到Modelscope模型库

简介: 下载大模型,都是通过huggingface。以前Llama 2的下载,必须通过Meta才能下载,直接使用Meta的代码去Meta官方下载,国内是很容易中断,导致无法下载。现在你通过了Meta申请通过后,可以直接在huggingface进行下载。

建议

  • ModelScope社区建议,notebook提供的免费虚拟机,磁盘容量升级到200G,不然很多工作是无法进行的。量化模型,是需要更多的空间,哪怕从虚拟机里上传到模型库,还需要缓存一份,导致空间不够使用。
  • 产品上,就好好学习colab。人家是容器,ModelScope是虚拟机。
  • 尽力和世界同步啊。
  • 模型库的存储,需要更加给力,这样我可以从colab直接上传到模型库,去重,秒传的功能。
  • notebook搞的好用一点,大家分享自己的notebook,帮助更多朋友更快熟悉,复用经验。
  • 产品联动,网盘和魔搭的虚拟机联动,可以从虚拟机里直接挂载。
  • notebook运行代码出错,通义千问,帮忙解决一下。这些都是可以参考google的colab。

介绍

国内从HuggingFace 下载大模型,也不容易,目前国内已经是无法直接访问HuggingFace。各种的mirror,代理,其实都很难保证你成功下载。

我需要把下载的大模型,放到阿里的ModelScope模型库,方便我使用ModelScope提供的虚拟机进行大模型微调。

没有太好的一步到位的办法,只能通过中转多次,才上传到ModelScope的模型库

HuggingFace --> Colab --> 阿里云盘 --> ModelScope虚拟机--> ModelScope模型库

本来最简单的方式,应该是Colab下载完成后,直接上传到ModelScope模型库,这个是没问题的。通过ModelScope API 是可以实现,就是速度太慢,缺少网盘秒传的功能,只能放弃。

采用这个方案的优势

  • colab下载大模型速度快,大约5分钟。
  • 阿里云盘上传快,因为网盘秒传特性,多大的模型基本都是3分钟。
  • 网盘的CLI,可以快速下载到阿里的虚拟机上,大约5-10分钟。
  • Git或Python SDK上传大模型到ModelScope模型库,速度保证,大约10分钟。

国外的网速和阿里云内部的网速是差不多的。一个100G 的大模型,无论下载和上传,都不是一件容易的事情,对基础设施,真的是一个很大的考验。尤其大模型的微调,就类似开发的CI过程,对git仓库是一个考验。

使用Llama-2-7b这个大模型做例子。colab代码,基本都是参考huggingface-China

感谢作者的分享,在调整过程中,确实是学到不少东西。

colab

这个colab,已经很完美。大家体验一下。我是提前把注释和代码填上,包括token,确认没有问题,再逐步运行,还可以选择:runtime-->run all 全部运行,比脚本运行还爽,提前把token填好,整个过程已经是无需交互。

Colab

# 安装需要的包
!pip install gradio huggingface_hub aligo

# import
import os
import shutil
import huggingface_hub as hh
import pandas as pd

# 下载llama 2,需要使用HuggingFace的token通过验证才能下载,其他模型,这一步可以省掉。
!huggingface-cli login --token hf_ziljuWSLzXXrlDvrUuB

# 下载模型,设置huggingface的repo_id,更换不同的模型,
# 只需要在repo_id设置就可以。其他地方无需调整。
repo_id = "meta-llama/Llama-2-7b"
repo_name = repo_id.replace("/","---")

# 定义容量显示和下载路径

def format_size(bytes, precision=2):
    """
    Convert a file size in bytes to a human-readable format like KB, MB, GB, etc.
    Huggingface use 1000 not 1024
    """
    units = ["B", "KB", "MB", "GB", "TB", "PB"]
    size = float(bytes)
    index = 0

    while size >= 1000 and index < len(units) - 1:
        index += 1
        size /= 1000

    return f"{size:.{precision}f} {units[index]}"


def list_repo_files_info(repo_id,token=None):
    data_ls = []
    for file in list(hh.list_files_info(repo_id)):
        data_ls.append([file.path,format_size(file.size)])
    files = [file[0] for file in data_ls]
    data = pd.DataFrame(data_ls,columns = ['文件名','大小'])
    return data, files

# 模型下载到当前目录下的"./download"目录
def download_file(repo_id,filenames):
    print(filenames)
    repo_name = repo_id.replace("/","---")

    for filename in filenames:
        print(filename)
        out = hh.hf_hub_download(repo_id=repo_id,filename=filename,local_dir=f"./download/{repo_name}",local_dir_use_symlinks=False,force_download =True)
    out_path = f"./download/{repo_name}"
    return out_path

查看模型文件大小

# 查看模型的文件
data, filenames = list_repo_files_info(repo_id)
filenames

下载模型

# 开始下载模型
out_path = download_file(repo_id,filenames)

查看模型下载结果

# 查看模型的大小和文件

import os.path
from pathlib import Path
path ="/content/download/"
path=os.path.join(path, repo_name)
print(path)

!du -sh $path
!ls -lsh $path

可以在Colab看到下载的大模型

阿里云盘

这个地方,最麻烦的就是拿到云盘的refresh_token。

参考这里

获取网盘refresh_token

打开Chrome,登录阿里网盘,chrome浏览器的右上角的3个点。或者用快捷方式:ctrl+shift+i

找到应用 标签:

环境配置

下面的操作,其实都是在Colab上进行。

# 上传阿里云盘,填上token
from aligo import Aligo
refresh_token = "自己的token"
ali = Aligo(refresh_token=refresh_token)

# 获取用户信息和获取网盘根目录文件列表
user = ali.get_user()
print(user.user_name, user.nick_name, user.phone)
ll = ali.get_file_list() 
ll

上传模型到阿里网盘

# 无法指定文件夹上传,只能传到根目录下,估计是cli的bug
remote_folder = ali.get_folder_by_path(out_path, create_folder=True)
ali.upload_folder(out_path)

ModelScope虚拟机

我的所有操作,都记录在notebook。包括模型的下载和上传到ModelScope模型库

notebook

登录ModelScope社区,启动虚拟机。

登录虚拟机,可以用终端,也是可以通过notebook,就是比较难用,这次我还尽量在notebook来完成操作。

阿里云盘操作手册

通过阿里云盘CLI,实现大模型下载。

# 云盘linux客户端
!curl -fsSL http://file.tickstep.com/apt/pgp | gpg --dearmor | tee /etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg arch=amd64,arm64] http://file.tickstep.com/apt aliyunpan main" | tee /etc/apt/sources.list.d/tickstep-aliyunpan.list > /dev/null && apt-get update && apt-get install -y aliyunpan

# CLI通过RefreshToken登录
!aliyunpan login -RefreshToken=<网盘的RefreshToken,上传网盘使用的那个RefreshToken>

# 设置下载存储路径
!aliyunpan config set -savedir /mnt

# 查看云盘根目录
!aliyunpan ls

# 下载云盘大模型
!aliyunpan download meta-llama---Llama-2-7b

# 查看下载结果
!du -sh /mnt
!ls -lsh /mnt

云盘CLI,会对目录生成一串数字,目录下,才是模型

# 一串数字改成huggingface
!mv 127d6e7249c548cbb773138c67178ea2 huggingface

ModelScope要求模型上传必须包含configuration.json 文件,所以专门在repo里创建一个空文件。

# 创建一个空文件,满足repo上传ModelScope要求
!touch ./huggingface/meta-llama---Llama-2-7b/configuration.json

ModelScope模型库

把模型上传到模型库,可以用git或SDK。

创建新模型

首先需要在ModelScope模型库,创建一个新的模型

进入创建的模型

目前模型文件只有2个文件

模型上传

参考文档

Python SDK上传模型

获取魔搭的token。上传

# 记得替换ModelScope token,同时更换你的model id
# repo必须包含一个configuration.json文件
from modelscope.hub.api import HubApi
YOUR_ACCESS_TOKEN = 'f368c21f-2ade-4ac0-876f-8bfb5d'
api = HubApi()
api.login(YOUR_ACCESS_TOKEN)
api.push_model(
    model_id="shakechen/Llama-2-7b", 
    model_dir="/mnt/huggingface/meta-llama---Llama-2-7b" 
)

大概10分钟,就上传完毕。可以在模型文件下看到上传的文件。

对比HuggingFace的repo的文件,会发现文件的大小有差异,这个是因为HuggingFace按G是1000M,不是1024M导致的。整个过程,就多了一个configuration.json 空文件。

相关文章
|
3月前
|
Web App开发 Python
在ModelScope中,你可以使用Python的浏览器自动化库
在ModelScope中,你可以使用Python的浏览器自动化库
43 2
|
3月前
|
自然语言处理
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
80 1
|
3月前
|
API 语音技术
ModelScope-FunASR**有支持热词又支持时间戳的模型**。
【2月更文挑战第30天】ModelScope-FunASR**有支持热词又支持时间戳的模型**。
145 2
|
3月前
|
人工智能 API 决策智能
Modelscope结合α-UMi:基于Modelscope的多模型协作Agent
基于单个开源小模型的工具调用Agent,由于模型容量和预训练能力获取的限制,无法在推理和规划、工具调用、回复生成等任务上同时获得比肩大模型等性能。
|
3月前
|
人工智能 达摩院 自然语言处理
超好用的开源模型平台,ModelScope阿里达摩院
超好用的开源模型平台,ModelScope阿里达摩院
274 1
|
7天前
|
人工智能 开发框架 物联网
赢万元奖金 | 第七届CCF开源创新大赛ModelScope开源模型应用挑战赛开启报名!
第七届CCF开源创新大赛(后简称“大赛”) 由中国计算机学会(CCF)主办,长沙理工大学、CCF开源发展委员会联合承办。
|
3月前
|
人工智能 自然语言处理 搜索推荐
魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
【2月更文挑战第9天】魔搭ModelScope社区作为一个AI模型开源平台,提供了丰富的模型资源和便捷的服务
361 3
|
2月前
|
人工智能 开发工具 Swift
ModelScope联手OpenDataLab:直接调用7000+开源数据集,赋能AI模型加速研发
魔搭社区和OpenDatalab浦数合作,共同开启一场模型与数据的深度融合,旨在为中国开发者打造更加高效、开放的AI体验。
|
3月前
|
机器学习/深度学习 人工智能 Swift
PAI x ModelScope: 在PAI使用ModelScope模型
在当前的人工智能领域,特别是大语言模型、文生图等领域,基于预训练模型完成机器学习模型的开发部署已成为重要的应用范式,开发者们依赖于这些先进的开源预训练模型,以简化机器学习应用的开发并加速创新。
|
3月前
|
机器学习/深度学习 测试技术 TensorFlow
ModelScope模型使用与EAS部署调用
本文以魔搭数据的模型为例,演示在DSW实例中如何快速调用模型,然后通过Python SDK将模型部署到阿里云PAI EAS服务,并演示使用EAS SDK实现对服务的快速调用,重点针对官方关于EAS模型上线后示例代码无法正常调通部分进行了补充。
159 2