Hugging Face 模型下载及使用
这篇文章介绍了Hugging Face平台和它的核心产品。演示了如何在AWS EC2实例上,从Hugging Face Hub下载并运行Qwen2-0.5B-Instruct模型。最后,还展示了如何用Gradio图形化界面与Qwen LLM进行聊天对话。
一、Hugging Face 简介 Hugging Face是一家美国公司,成立于2016年,起初是为青少年开发聊天机器人应用程序。后来,Hugging Face转型为专注于机器学习的平台公司,推出了多款促进NLP(自然语言处理)技术发展的产品。主要产品有:
预训练模型 :Hugging Face提供了一系列优秀的预训练NLP模型,如BERT、GPT、RoBERTa等,这些模型在多项任务中表现出色。Transformers库 :Hugging Face开发了名为transformers
的Python库,支持PyTorch和TensorFlow等深度学习框架,提供了加载、微调和使用预训练模型的便捷工具。NLP工具 :他们提供了多种NLP相关工具,如文本生成、文本分类和命名实体识别,帮助开发者快速构建NLP应用。Hugging Face Hub :这是一个集中式的Web平台,类似于GitHub,托管基于Git的代码仓库、模型和数据集,并支持项目讨论和拉取请求。Hugging Face Spaces :Hugging Face Spaces是一个允许用户轻松部署和分享AI应用的平台。。它提供了一个易于使用的GUI,使用户能够快速创建和部署Web托管的ML应用。2021年底,Hugging Face宣布收购了Gradio。Gradio是一个开源Python包,允许用户快速为机器学习模型、API或任何Python函数构建交互式演示或Web应用程序,无需编写HTML、CSS或JavaScript代码。二、大模型竞技场与排名 另外在Hugging Face可以查看各个大模型的排行榜,例如下面的开源大模型排行榜 [1]。
由LMSYS维护的大模型聊天竞技场,收集人类对大模型聊天回复的反馈,进行排名 [2]。
发送的问题会同时给两个模型进行回复,根据回复内容进行投票,一共4个选项,A胜、B胜、平手或者都不行。投票后会显示回复的大模型版本。
三、Hugging Face Spaces 使用 Hugging Face Spaces是一个允许用户轻松部署和分享AI应用的平台,很多大模型都会在Spaces上发布不同版本的模型,为大家提供测试。例如下面是Qwen的Spaces空间https://huggingface.co/Qwen [3]。
点击进入Qwen2-72B-Instruct Chat
,可以进行聊天测试。
四、EC2 本地运行 Qwen2-0.5B-Instruct 模型 这部分演示一下,通过EC2下载和启动Qwen2-0.5B-Instruct
模型。我选择Deep Learning类型的AMI,这个类型的AMI已经预先安装了英伟达的驱动。
选择Ubuntu或者Amazon Linux2023都可以,这里我选择Ubuntu22.04版本的镜像。
选择g4dn.xlarge
,带有1个NVIDA T4显卡,共有16GB GPU,这是带有英伟达显卡最便宜的实例。
实例已经预装了英伟达驱动,启动之后通过nvidia-smi
命令查看一下GPU信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 root@ip-172-31-83-158:~# nvidia-smi Fri Jul 5 03:34:19 2024 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 33C P8 9W / 70W | 2MiB / 15360MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
进入Qwen2-0.5B-Instruct页面https://huggingface.co/Qwen/Qwen2-0.5B-Instruct ,拷贝模型链接 [5]。
要下载模型文件,需要先安装git-lfs
,否则不会下载项目中的大型文件。
Git LFS(Large File Storage)是一个Git扩展工具,用于高效管理大文件。它通过将大文件存储在单独的LFS存储库中,避免了Git仓库体积过大,提升了项目管理效率。Git LFS特别适用于需要处理大型文件的项目,如音乐、图片、视频等。该工具易于安装和配置,并且在多个平台上有良好的支持。
1 2 root@ip-172-31-83-158:~# apt update -y root@ip-172-31-83-158:~# apt install git-lfs -y
下载模型文件
1 root@ip-172-31-83-158:~# git clone https://huggingface.co/Qwen/Qwen2-0.5B-Instruct
查看模型文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 root@ip-172-31-83-158:~# cd Qwen2-0.5B-Instruct/ root@ip-172-31-83-158:~/Qwen2-0.5B-Instruct# ll -h total 954M drwxr-xr-x 3 root root 4.0K Jul 5 03:36 ./ drwx------ 8 root root 4.0K Jul 5 03:36 ../ drwxr-xr-x 9 root root 4.0K Jul 5 03:36 .git/ -rw-r--r-- 1 root root 1.5K Jul 5 03:36 .gitattributes -rw-r--r-- 1 root root 12K Jul 5 03:36 LICENSE -rw-r--r-- 1 root root 3.5K Jul 5 03:36 README.md -rw-r--r-- 1 root root 659 Jul 5 03:36 config.json -rw-r--r-- 1 root root 242 Jul 5 03:36 generation_config.json -rw-r--r-- 1 root root 1.6M Jul 5 03:36 merges.txt -rw-r--r-- 1 root root 943M Jul 5 03:36 model.safetensors -rw-r--r-- 1 root root 6.8M Jul 5 03:36 tokenizer.json -rw-r--r-- 1 root root 1.3K Jul 5 03:36 tokenizer_config.json -rw-r--r-- 1 root root 2.7M Jul 5 03:36 vocab.json
安装python包依赖,这三个python包都比较大,下载时间较长。
1 root@ip-172-31-83-158:~# pip install transformers torch accelerate
国内可以指定pip安装源。
1 pip install transformers torch -i https://pypi.tuna.tsinghua.edu.cn/simple
拷贝官方提供的快速启动脚本,这里我修改模型的路径为绝对路径"/root/Qwen2-0.5B-Instruct"
,Prompt修改为"你是谁?"
,增加了打印响应结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 vim /root/qwen0.5 b-demo.py from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda" model = AutoModelForCausalLM.from_pretrained( "/root/Qwen2-0.5B-Instruct" , torch_dtype="auto" , device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct" ) prompt = "你是谁?" messages = [ {"role" : "system" , "content" : "You are a helpful assistant." }, {"role" : "user" , "content" : prompt} ] text = tokenizer.apply_chat_template( messages, tokenize=False , add_generation_prompt=True ) model_inputs = tokenizer([text], return_tensors="pt" ).to(device) generated_ids = model.generate( model_inputs.input_ids, max_new_tokens=512 ) generated_ids = [ output_ids[len (input_ids):] for input_ids, output_ids in zip (model_inputs.input_ids, generated_ids) ] response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True )[0 ] print (response)
运行脚本,查看模型返回结果。
1 2 3 4 root@ip-172-31-83-158:~# python3 qwen0.5b-demo.py Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained. The attention mask is not set and cannot be inferred from input because pad token is same as eos token.As a consequence, you s `attention_mask` to obtain reliable results. 我是阿里云开发的一款超大规模语言模型,我叫通义千问。
查看GPU消耗。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ubuntu@ip-172-31-83-158:~$ nvidia-smi Fri Jul 5 03:51:05 2024 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.01 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 37C P0 32W / 70W | 1313MiB / 15360MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | 0 N/A N/A 3152 C python3 1308MiB | +---------------------------------------------------------------------------------------+
Qwen Gradio 图形化界面
命令行进行对话并不方便,可以使用官方提供的web_demo.py
脚本 [6],通过图形化页面进行对话,脚本网址是https://github.com/QwenLM/Qwen2/blob/main/examples/demo/web_demo.py。
安装脚本所需要的依赖,前面已经安装过transformers torch accelerate
这三个库了,这里只需要安装gradio
即可。
1 root@ip-172-31-83-158:~# pip install gradio
运行脚本,-- server-name 0.0.0.0
允许所有地址进行访问,--checkpoint-path /root/Qwen2-0.5B-Instruct
指定模型文件所在目录。
1 root@ip-172-31-83-158:~# python3 web_demo.py --server-name 0.0.0.0 --checkpoint-path /root/Qwen2-0.5B-Instruct
使用公网地址加上8000端口打开网页查看。
五、文档链接