[Road to AI] Use huggingface_hub para resolver elegantemente el problema de descargar modelos grandes de huggingface


prefacio

Los recursos de Hugging face son muy buenos, pero la velocidad de descarga doméstica es muy lenta, y la descarga es fácil de agotar para un modelo grande de GB, y la descarga a menudo no se realiza correctamente. Afecta mucho la confianza de jugar AI. (Algunas personas dicen que use Xunlei, pruébelo y sabrá la impotencia).

Después de muchas pruebas, la descarga finalmente se realiza y la descarga puede continuar incluso si se agota el tiempo de espera. ¡Descarga realmente sin preocupaciones! ¿Cómo exactamente? Veamos el desglose de este artículo.


1. ¿Qué es abrazar la cara?

Hugging face era originalmente un proveedor de servicios de puesta en marcha de bots conversacionales con sede en Nueva York. Originalmente planeó iniciar un negocio como un bot conversacional. Abrió una biblioteca de Transformers en Github. Aunque el negocio de los bots conversacionales no comenzó, su biblioteca rápidamente se hizo popular en la comunidad de aprendizaje automático. En la actualidad, se han compartido más de 100 000 modelos preentrenados y 10 000 conjuntos de datos. Parece que Chen Guo ha establecido GitHub para desarrolladores de IA, proporcionando modelos, conjuntos de datos (texto|imagen|audio|video), bibliotecas de clases (como transformers|peft|accelerate), tutoriales, etc.

URL del sitio web oficial: https://huggingface.co/

2. Preparación

Instale pip install huggingface_hub para instalar el paquete huggingface_hub

C:\Users\Administrator>pip install huggingface_hub
Requirement already satisfied: huggingface_hub in d:\programdata\anaconda3\lib\site-packages (0.13.2)
Requirement already satisfied: pyyaml>=5.1 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (6.0)
Requirement already satisfied: typing-extensions>=3.7.4.3 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (4.4.0)
Requirement already satisfied: packaging>=20.9 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (22.0)
Requirement already satisfied: requests in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (2.28.2)
Requirement already satisfied: tqdm>=4.42.1 in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (4.64.1)
Requirement already satisfied: filelock in d:\programdata\anaconda3\lib\site-packages (from huggingface_hub) (3.12.0)
Requirement already satisfied: colorama in d:\programdata\anaconda3\lib\site-packages (from tqdm>=4.42.1->huggingface_hub) (0.4.6)
Requirement already satisfied: charset-normalizer<4,>=2 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (3.4)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (2022.12.7)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in d:\programdata\anaconda3\lib\site-packages (from requests->huggingface_hub) (1.26.14)
C:\Users\Administrator>

3. Descargue todo el almacén o un solo archivo de modelo grande

Encuentre el almacén que necesita descargar, el cuadro rojo es el repo_id, seleccione el cuadro azul para ver los archivos en el almacén.
inserte la descripción de la imagen aquí

1. Descarga todo el repositorio

Use snapshot_download para descargar la instantánea completa del almacén, preste atención a los siguientes parámetros:

  • allow_patterns selecciona los tipos de archivos que deben descargarse y establece los tipos de archivos que deben ignorarse a través de ignore_patterns.
  • resume_download=Verdadero, lo que significa que se permite la descarga del currículum, lo cual es muy necesario.
  • etag_timeout=100, el umbral de tiempo de espera, el valor predeterminado es de 10 segundos, aquí puede modificarlo según la situación.
    Se puede acceder a más detalles de parámetros en: https://huggingface.co/docs/huggingface_hub/v0.16.3/guides/download
import time
from huggingface_hub import snapshot_download
repo_id = "LinkSoul/Chinese-Llama-2-7b"
local_dir = 'd:/ai/models1'
cache_dir = local_dir + "/cache"
while True:
    try:
        snapshot_download(cache_dir=cache_dir,
        local_dir=local_dir,
        repo_id=repo_id,
        local_dir_use_symlinks=False,
        resume_download=True,
        allow_patterns=["*.model", "*.json", "*.bin",
        "*.py", "*.md", "*.txt"],
        ignore_patterns=["*.safetensors", "*.msgpack",
        "*.h5", "*.ot",],
        )
    except Exception as e :
        print(e)
        # time.sleep(5)
    else:
        print('下载完成')
        break

inserte la descripción de la imagen aquí

2. Descargue un solo archivo de modelo grande

En algunos casos, solo necesitamos descargar el archivo de modelo grande, en lugar de descargar todo el almacén del proyecto, solo use hf_hub_download para descargar. La configuración de los parámetros se explica más arriba.

import time
from huggingface_hub import hf_hub_download
repo_id = "BlinkDL/rwkv-4-pile-7b" # 仓库ID
local_dir = 'd:/ai/models2'
cache_dir = local_dir + "/cache"
filename= "RWKV-4-Pile-7B-Chn-testNovel-done-ctx2048-20230404.pth"
while True:   
    try:
        hf_hub_download(cache_dir=cache_dir,
        local_dir=local_dir,
        repo_id=repo_id,
        filename=filename,
        local_dir_use_symlinks=False,
        resume_download=True,
        etag_timeout=100
        )
    except Exception as e :
        print(e)
        # time.sleep(5)
    else:
        print('下载完成')
        break

inserte la descripción de la imagen aquí


Resumir

Después de varias pruebas, la descarga del modelo finalmente se realiza y ya no tiene que preocuparse por descargar archivos grandes.
Hay innumerables trampas, y el artículo es solo para que los bloggers eviten desvíos.
Si lo encuentra útil, por favor, deme un pulgar hacia arriba, ¡gracias!

apéndice

huggingface Comunidad China
https://huggingface.co/blog/zh

Supongo que te gusta

Origin blog.csdn.net/popboy29/article/details/131979434
Recomendado
Clasificación