AI摘要:这篇文章主要介绍了在使用Hugging Face模型时的下载环境配置和开源模型部署,以及模型评估的相关步骤。在下载环境配置方面,文章提到了使用huggingface-cli进行模型和数据集的下载,并介绍了国内镜像站的添加方法以及下载加速模块的安装和启用方法。在开源模型部署方面,以Llama-Chinese项目为例,介绍了克隆GitHub项目和下载🤗模型的步骤,以及使用vLLM + Gradio进行推理部署的方法,包括vLLM后端和Gradio前端的安装和启动步骤。在模型评估方面,文章介绍了使用opencompass进行环境配置、数据集下载以及评估任务的具体步骤,并提供了相关参数的设置示例。

基础环境

Hugging Face 下载环境

huggingface-cli

  1. Hugging Face网页只能一个一个文件下载,推荐使用官方命令行工具(需要Python>=3.8)下载,安装命令:pip install -U huggingface_hub
  2. 使用命令:
    下载模型:huggingface-cli download --resume-download gpt2 --local-dir gpt2
    下载数据集:huggingface-cli download --repo-type dataset --resume-download wikitext --local-dir wikitext
    可以添加 --local-dir-use-symlinks False 参数禁用文件软链接
  3. 国内镜像站添加方法:
    Linux:export HF_ENDPOINT=https://hf-mirror.com
    Windows:$env:HF_ENDPOINT = "https://hf-mirror.com"
  4. (可能导致下载稳定性下降)下载加速模块安装:pip install -U hf-transfer,启用方法:
    Linux:export HF_HUB_ENABLE_HF_TRANSFER=1
    Windows:$env:HF_HUB_ENABLE_HF_TRANSFER = 1

hfd.sh

  1. 下载脚本:wget https://gist.githubusercontent.com/padeoe/697678ab8e528b85a2a7bddafea1fa4f/raw/519fd311b95b3c4890e43c5a38961bf6ada493ef/hfd.sh
  2. 通过aria2c:./hfd.sh bigscience/bloom-560m --tool aria2c -x 4
  3. 通过wget:./hfd.sh bigscience/bloom-560m

参考资料

开源模型部署

(以Llama-Chinese项目为例)

克隆GitHub项目

  1. git clone https://github.com/LlamaFamily/Llama-Chinese.git

下载🤗模型

  1. Atom-7B:huggingface-cli download --resume-download FlagAlpha/Atom-7B --local-dir FlagAlpha/Atom-7B
  2. chatglm2-6b-int4:huggingface-cli download --resume-download THUDM/chatglm2-6b-int4 --local-dir THUDM/chatglm2-6b-int4

推理部署

vLLM + Gradio

vLLM后端
  1. 安装:pip install vllm
  2. 启动OpenAI 兼容服务器:

    CUDA_VISIBLE_DEVICES=0,1 python -m vllm.entrypoints.openai.api_server \
    --model /root/zly/model/RolePlayLake-7B `# 要使用的 Huggingface 模型的名称或路径`\
    --tokenizer /root/zly/model/RolePlayLake-7B `# 要使用的 Huggingface 分词器的名称或路径`\
    --host localhost `# 主机名`\
    --port 8000 `# 端口号默认8000`\
    --api-key token-abc123 `# api key`\
    --dtype float32 `# 模型权重和激活的数据类型` \
    --max-model-len 10864 `# 模型上下文长度`\
    --worker-use-ray `# 使用Ray进行分布式服务`\
    --enforce-eager `# 始终使用 eager 模式 PyTorch`

    更多参数请参考vllm手册

Gradio前端
  1. 安装Gradio:pip install gradio
  2. 安装openai: pip install openai (注意版本兼容)
  3. 后端代码简单示例demo.py(避免命名为gradio.py以免引起混淆导致gradio调用失败):

    from openai import OpenAI
    import gradio as gr
    
    # Set OpenAI's API key and API base to use vLLM's API server.
    openai_api_key = "token-abc123"
    openai_api_base = "http://localhost:8000/v1"
    
    # 创建一个 OpenAI 客户端,用于与 API 服务器进行交互
    client = OpenAI(
     api_key=openai_api_key,
     base_url=openai_api_base,
    )
    
    def predict(message, history):
     # 将聊天历史转换为 OpenAI 格式
     history_openai_format = [{"role": "system", "content": "你是个靠谱的 AI 助手,尽量详细的解答用户的提问。"}]
     for human, assistant in history:
         history_openai_format.append({"role": "user", "content": human })
         history_openai_format.append({"role": "assistant", "content":assistant})
     history_openai_format.append({"role": "user", "content": message})
    
     # 创建一个聊天完成请求,并将其发送到 API 服务器
     stream = client.chat.completions.create(
         model='/root/zly/model/RolePlayLake-7B',   # 使用的模型名称
         messages= history_openai_format,  # 聊天历史
         temperature=0.8,                  # 控制生成文本的随机性
         stream=True,                      # 是否以流的形式接收响应
         extra_body={
             'repetition_penalty': 1, 
             'stop_token_ids': [7]
         }
     )
    
     # 从响应流中读取并返回生成的文本
     partial_message = ""
     for chunk in stream:
         partial_message += (chunk.choices[0].delta.content or "")
         yield partial_message
    
    # 创建一个聊天界面,并启动它,share=True 让 gradio 为我们提供一个 debug 用的域名
    gr.ChatInterface(predict).queue().launch(share=True, server_name="0.0.0.0", server_port=9001)

    注意代码与gradio、openai的版本兼容问题

  4. 启动前端:python demo.py
    可能需要手动下载一个frpc文件,按照提示下载重命名后放到对应目录下,添加执行权限后即可正常生成测试外网访问路径。

详细前端功能添加请参考Gradio手册

模型评估

opencompass

环境配置
conda create --name opencompass python=3.10 pytorch torchvision pytorch-cuda -c nvidia -c pytorch -y
conda activate opencompass
git clone https://github.com/open-compass/opencompass opencompass
cd opencompass
pip install -e .
下载数据集
wget https://github.com/open-compass/opencompass/releases/download/0.2.2.rc1/OpenCompassData-core-20240207.zip
unzip OpenCompassData-core-20240207.zip
开始评估
  1. 查看内置模型和数据集:python tools/list_configs.py
  2. 使用 --models 和 --datasets 结合想测试的模型和数据集:python run.py --models hf_opt_125m hf_opt_350m --datasets siqa_gen winograd_ppl
  3. 自定义HF模型:

    python run.py --datasets siqa_gen winograd_ppl \
    --hf-path facebook/opt-125m \  # HuggingFace 模型路径
    --tokenizer-path facebook/opt-125m \  # HuggingFace tokenizer 路径(如果与模型路径相同,可以省略)
    --tokenizer-kwargs padding_side='left' truncation='left' trust_remote_code=True \  # 构建 tokenizer 的参数
    --model-kwargs device_map='auto' \  # 构建模型的参数
    --max-seq-len 2048 \  # 模型可以接受的最大序列长度
    --max-out-len 100 \  # 生成的最大 token 数
    --batch-size 64  \  # 批量大小
    --num-gpus 1  # 运行模型所需的 GPU 数量
  4. -w outputs/demo参数将自定义输出文件路径,--debug参数使任务将按顺序执行,并实时打印输出
  5. python run.py --help查看更多参数
  6. 数据集配置文件在configs/datasets目录下,如遇路径错误,编辑其中具体py文件以更改路径。
  7. 使用下载好的本地模型:

    python run.py --datasets siqa_gen winograd_ppl \
    --hf-path /path/to/model \  # HuggingFace 模型地址
    --tokenizer-path /path/to/model \  # HuggingFace 模型地址
    --model-kwargs device_map='auto' trust_remote_code=True \  # 构造 model 的参数
    --tokenizer-kwargs padding_side='left' truncation='left' use_fast=False trust_remote_code=True \  # 构造 tokenizer 的参数
    --max-out-len 100 \  # 模型能接受的最大序列长度
    --max-seq-len 2048 \  # 最长生成 token 数
    --batch-size 8 \  # 批次大小
    --no-batch-padding \  # 不打开 batch padding,通过 for loop 推理,避免精度损失
    --num-gpus 1  # 所需 gpu 数

参考资料

API模型

TODO

文章目录