Hugging Face系列1:詳細剖析Hugging Face網站資源
- 前言
- 本篇摘要
- 1. Hugging Face Hub三大件
- 1.1 模型
- 1.1.1 模型簡介
- 1.1.2 制作模型卡片
- 1.1.3 模型下載和上傳
- 1.1.4 模型應用
- 1.2 數據集
- 1.2.1 數據集簡介
- 1.2.2 調用代碼
- 1.2.3 AutoTrain在線微調
- 1.3 Space應用
- 1.3.1 內容簡介
- 1.3.2 **虛擬換裝:IDM-VTON**
- 1.3.3 燈光特效:IC-Light
- 1.3.4 Artificial Analysis LLM Performance Leaderboard
- 1.3.5 創建自己的Space應用
- 2. Hugging Face其他資源介紹
- 2.1 Hugging Face開源庫
- 2.2 Hugging Face Gradio工具
- 2.3 Hugging Face學習資源
- 2.3.1 NLP課程
- 2.3.2 擴散模型課程
- 2.3.3 深度強化學習課程
- 2.4 Hugging Face各個資源網址
- 3. 擴散模型原理
前言
本系列文章旨在全面系統的介紹Hugging Face,讓小白也能熟練使用Hugging Face上的各種開源資源,并上手創建自己的第一個Space App,在本地加載Hugging Face管線訓練自己的第一個模型,并使用模型生成采樣數據,同時詳細解決部署中出現的各種問題。后續文章會分別介紹采樣器及其加速、顯示分類器引導擴散模型、CLIP多模態圖像引導生成、DDMI反轉及控制類大模型ControlNet等,根據反饋情況可能再增加最底層的邏輯公式和從零開始訓練LLM等,讓您從原理到實踐徹底搞懂擴散模型和大語言模型。歡迎點贊評論、收藏和關注,這些對本系列文章非常重要。
本系列文章如下:
- 《詳細剖析Hugging Face網站資源》:全面系統的介紹Hugging Face資源;
- 《從0到1:使用Hugging Face管線加載Diffusion模型生成第一張圖像》:在本地加載Hugging Face管線訓練自己的第一個模型,并使用模型生成采樣數據,同時詳細解決部署中出現的各種問題。
本篇摘要
本篇主要介紹Hugging Face。Hugging Face是一個人工智能的開源社區,是相關從業者協作和交流的平臺。它的核心產品是Hugging Face Hub,這是一個基于Git進行版本管理的存儲庫,截至2024年5月,已托管了65萬個模型、14.5萬個數據集以及超過17萬個Space應用。另外,Hugging Face還開源了一系列的機器學習庫如Transformers、Datasets和Diffusers等,以及界面演示工具Gradio。最后,Hugging Face設計開發了很多學習資源,比如與NLP(大語言模型)、擴散模型及深度強化學習等相關課程。為了吸引新手注意,廣開方便之門,本篇介紹了大量有趣的Spaces應用,比如換裝IDM-VTON、燈光特效IC-Light、LLM性能排行Artificial Analysis LLM Performance Leaderboard和自己部署的文生圖模型stable-diffusion-xl-base-1.0、對圖片精細化的stable-diffusion-xl-refiner-1.0等。只要讀者認真按著文章操作,上述操作都可自己實現。下面對以上內容逐一介紹。
1. Hugging Face Hub三大件
1.1 模型
1.1.1 模型簡介
Hugging Face收錄了大量的文生文、文生圖、文生音頻、文生視頻及圖生視頻等多模態模型。模型界面的內容大致包括以下幾方面:標簽、模型卡片、文件和版本、社區交流、訓練/部署/應用、推理API和應用的Spaces等。以大名鼎鼎的文生圖模型stabilityai/stable-diffusion-xl-base-1.0為例,各部分所在區域如下圖所示:
關于鏈接無法打開的說明:由于國內已禁止訪問國外大部分AI資源,所以國內用戶無法打開鏈接,這里可以使用HF的鏡像網站:https://hf-mirror.com/,用它替換鏈接中的https://huggingface.co/即可。但下載授權資源仍需hf_token,這里可通過梯子申請,Hugging Face賬戶也可通過梯子注冊。作者使用的梯子是儀表盤,便宜又好用,此外還有較貴的搬瓦工、西部世界等,適合企業級用戶,筆者身體不太好,所以更新較慢,著急的讀者可以自己點開鏈接先研究研究,具體操作見下篇的實戰部分。
因為穩定問題,所以作者并不推薦免費梯子,對比過多款梯子后,儀表盤可以說是花小錢辦大事,從此您就可以過上隨意翻墻的快樂生活!
下面逐一介紹模型內容:
- 模型標簽:相當于模型的關鍵字,包括使用的許可協議、安全協議、模型用途、引用的arXiv.org論文、開發庫、支持語言、部署方法等。
- 模型卡片:包括模型介紹(模型名稱、開發者、輸入輸出、模型結構、發布日期及狀態等)、使用說明(應用代碼或命令行、軟硬件說明、支持庫等)、訓練數據及評判基準等。
- 文件和版本:存儲模型版本對應的文件,不需要授權的文件可以直接下載。
- 社區交流:包括求助貼和問題討論等。
- 推理API:這里輸入prompt,模型會推理出結果,相當于一個簡易的demo。但有的程序不支持推理API。
- Spaces應用:使用此模型部署的Space。Space相當于一個封裝了該模型的App,并提供一個UI給用戶使用。
1.1.2 制作模型卡片
模型卡片是對模型的重要說明,是了解模型的窗口。當把模型開源到Hugging Face時,就需要制作卡片對模型進行詳細介紹,示例代碼如下所示:
from huggingface_hub import ModelCard, ModelCardData, EvalResult# Using the Template,Including Evaluation Results(Optional)
card_data = ModelCardData(language='en',license='mit',library_name='timm',tags=['image-classification', 'resnet'],datasets=['beans'],metrics=['accuracy'],eval_results=[EvalResult(task_type='image-classification',dataset_type='beans',dataset_name='Beans',metric_type='accuracy',metric_value=0.9,),],model_name='my-cool-model',
)card = ModelCard.from_template(card_data,model_description='This model does x + y...'
)card.push_to_hub(hub_model_id)
對模型卡片的進一步學習可以參考官方文檔Repository Cards。
1.1.3 模型下載和上傳
用戶可以在Hub下載或上傳模型,比如下載BERT的基礎模型的git命令及huggingface-cli命令如下:
git clone https://hf.co/bert-base-uncase # git命令,可在最后添加下載目錄
huggingface-cli download --resume-download google-bert/bert-base-uncased --local-dir bert-base-uncased #huggingface-cli命令,--local-dir用于建立軟鏈接
上傳模型的代碼如下(這里只做簡單演示,代碼講解及應用參見后續):
from huggingface_hub import HfApi, create_repo
from huggingface_hub import get_full_repo_namemodel_name = "XXX"
hub_model_id = get_full_repo_name(model_name) #獲取完整路徑create_repo(hub_model_id) #創建存儲庫
api = HfApi() #獲取上傳接口,并上傳文件夾及文件
api.upload_folder(folder_path=f"{model_name}/scheduler", path_in_repo="", repo_id=hub_model_id)
api.upload_folder(folder_path=f"{model_name}/unet", path_in_repo="", repo_id=hub_model_id)
api.upload_file(path_or_fileobj=f"{model_name}/model_index.json", path_in_repo="model_index.json", repo_id=hub_model_id)
1.1.4 模型應用
單擊訓練/部署/應用區域的“Deploy->Inference API",出現如下不同語言的應用代碼:
也可選擇其它的應用方案,比如單擊“Use in Diffusers”獲取如下代碼:
from diffusers import DiffusionPipelinepipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0")
Q:你能看出上面兩種應用方案的不同嗎?
1.2 數據集
1.2.1 數據集簡介
上文已提到,Hugging Face Hub開源和維護了大量的數據集,它還按照語言對數據集進行了拆分,并清理了文章中不必要的符號信息,以便開發者直接調用。以databricks公司收集的數據集databricks-dolly-15k為例,它是指令引導式的開源數據集,可用于任何商業和學術目的,這些記錄符合InstructionGPT論文中概述的行為類別,包括封閉式QA、開放式QA、文本生成、信息提取、標簽分類、頭腦風暴和概括總結等。數據集界面如下圖:
其內容形式大致與模型界面類似,這里不再贅述。唯一需要關注的不同點是Viewer,這里可以概覽數據集中的數據,對各類數據記錄有個大概認識。
1.2.2 調用代碼
對于經典數據集databricks/databricks-dolly-15k的調用代碼如下,也可以點擊“Use in Datasets library”查看這段代碼:
from datasets import load_datasetdataset = load_dataset("databricks/databricks-dolly-15k", split="train")
train_dataloader = torch.utils.data.DataLoader(dataset, batch_size=128, shuffle=True)
也可以通過命令huggingface-cli下載代碼:
huggingface-cli download --repo-type dataset --resume-download databricks/databricks-dolly-15k --local-dir databricks-dolly-15k
1.2.3 AutoTrain在線微調
Hugging Face Hub還支持通過上傳自己的數據集,直接在線微調模型。我們以cognitivecomputations/dolphin-2.9-llama3-8b為例,此時有兩種方法創建
AutoTrain Project:第一種,在AutoTrain功能主頁點擊“Create new project”,如下圖:
第二種,需在模型界面點擊Train->Auto Train(部分模型不支持)->Create a new AutoTrain project,后續操作類似,點擊后出現如下界面:
此時自動創建Space,起名為AutoTrainLLM,協議選擇other,Space SDK選擇Docker,Docker template選擇AutoTrain,其余保持默認,點擊“Create Space”。
此時沒登錄會提示登錄,登錄后對新建AutoTrainLLM進行授權,授權后進入訓練界面,如下圖所示:
為微調工程命名(名字中不能有特殊字符,否則回報不知名錯誤,如筆者圖中去掉名字中點號后才運行成功),也可以選擇已創建的工程。Task選擇為LLM SFT,Base Model選擇需要微調的模型,此處選為cognitivecomputations/dolphin-2.9-llama3-8b。
重點來了,Dataset訓練數據集即對模型進行微調的數據集,如果有自己的數據集,選擇Upload Dataset后上傳自己的數據集。否則可以從Hugging Face Hub中挑選數據集,如我們選用1.2.2小節提到的數據集databricks/databricks-dolly-15k,根據數據集的訓練提示,Train Split填為15000,然后根據實際需要調節右側訓練參數Training Parameters,最后點擊“Start Training->Yes, I’m sure”,微調成功后會提示“Success! Monitor your job locally /in logs”。此時查看右上角的Logs,會有訓練的日志輸出,如下圖:
1.3 Space應用
1.3.1 內容簡介
此節我們介紹豐富多彩的Spaces應用,幫大家了解Spaces一二,方便大家可以自己探索這些令人眼花繚亂又驚喜不斷的Apps。其首頁如下圖:
使用Spaces可在幾分鐘內構建、托管和共享ML應用程序。使用Spaces部署應用程序具有如下優勢:
- Get started quickly:提供了構建和托管大型人工智能應用程序和演示所需的所有工具,比如CLion,KDevelop等。
- Optimized for AI:運行在Hugging Face優化的ML基礎硬件設施上,只需點擊幾下即可大規模部署您的應用程序。
- Zero GPU:通過一種新型的分布式GPU,可以在運行中自動擴展應用程序。
- Craft collaboratively(協同制作):通過開箱即用的基于git的版本控制工作流,個人和團隊可以輕松協作構建人工智能應用程序。
- Build it your way:使用Streamlit、Gradio甚至Docker來構建、部署和托管人工智能應用程序。
- Various Hardware:從免費的CPU到TPU,您可以為您的應用程序獲得合適的硬件。
- Build your portfolio:向社區展示您的工作,構建獨特的應用程序,并與其他人工智能建設者建立新的聯系。
Hugging Face為每個Space應用提供了免費的兩核CPU+16GB內存的服務器資源,但免費服務器會在閑置一定時間后自動進入休眠狀態,并在有用戶訪問時被再次喚醒。為了獲得更穩定訪問,可以付費升級、向社區申請贊助或向官方申請免費升級。
下面我們就來看一看具體的Spaces應用并親手創建一個自己的Spaces應用程序。
1.3.2 虛擬換裝:IDM-VTON
IDM-VTON是一個在線衣服試穿程序,通過上傳人像和衣服照片,可以自動生成試穿效果,如下圖所示:
操作步驟如下:
- 首先,上傳人物照片和衣服照片,也可選擇示例圖。
- 然后,編寫prompt(可留空)添加自己想要的效果,如beautiful woman, detailed face, sunset over sea, top light。
- 第三步,可勾選自動生成掩碼圖像和自動調整大小,避免圖片被拉伸變形。
- 最后,還可通過Advances設置去噪步數和隨機種子。增加去噪步數可以生成更精美圖像,如果對本次生成結果不滿,可設置不同的隨機種子來生成不同效果的圖像。
設置完畢后點擊最下方的"try on",等待幾十秒即可看到試穿效果。
1.3.3 燈光特效:IC-Light
通過IDM-VTON換裝的圖片還缺點大片特效,IC-Light正好可以添加不同風格的光影特效,讓你的圖片秒變大師手筆,效果如下圖所示:
操作步驟如下:
- 上傳換裝的照片;
- 選擇燈光偏好、人物細節及燈光細節,選擇后會在輸入框中出現對應的prompt,當然也可以自己編寫prompt;
- 選擇生成圖片張數、隨機種子及分辨率,分辨率最大支持1024*1024;
- 點擊Advanced options(高級可選),選擇調整steps(迭代步數)、CFG Scale(代表圖像與提示的匹配程度)、Lowres Denoise(低分辨率去噪)、Highres Denoise(高分辨率去噪)、Highres Scale(高分辨率縮放)、Prompt和Negative Prompt(負面提示),讀者可根據自己需要嘗試不同的組合,體驗不同的生成效果。
設置完畢后點擊"Relight",等待幾十秒鐘即可得到不同特效的照片,最后我們就可以把精美大片分享給自己的好友啦。
1.3.4 Artificial Analysis LLM Performance Leaderboard
Artificial Analysis LLM Performance Leaderboard(人工分析LLM性能排行榜)是通過LLM提供的API,獨立進行性能基準&計價的榜單,表中羅列了各模型的API供應商、模型名稱、上下文窗口、模型質量、計價(美元/百萬tokens)、吞吐量、延遲和詳細分析,如下圖所示:
其中上下文窗口、模型質量、計價、吞吐量和延遲可展開,以便查看更詳細的性能指標。
點擊詳細分析中的Model/Providers,會跳轉到artificialanalysis.ai,Model通過圖表的形式提供了該模型更詳細的性能分析,Providers則通過對比該廠商名下的各個不同版本的Moel,方便我們根據自己的需要選擇,如下圖所示:
1.3.5 創建自己的Space應用
通過Hugging Face提供的免費硬件,我們可以創建屬于自己的Space應用,并且可以供它人訪問、下載和互動。這里介紹兩種創建方式:第一種,在Spaces主頁點擊“Create new space”,如下圖:
第二種,直接引用已有模型作為基礎模型,創建自己的Space。為了讓大家體驗不同的模型,這里引用1.1.1節介紹的文生圖模型stabilityai/stable-diffusion-xl-base-1.0的精細化版模型stabilityai/stable-diffusion-xl-refiner-1.0,也可以直接使用stable-diffusion-xl-base-1.0,作者在創建refiner版時,遇到不支持image-to-image類型pipline的錯誤,暫時未解決,所以建議先使用base版本的stable-diffusion。
在模型界面點擊Deploy->Spaces,如下圖:
彈出如下窗口,點擊“Create new Space”:
跳到創建Space頁面,如下圖所示:
操作步驟如下:
- 選擇創建者和Space名稱,然后選擇License,License可從模型標簽中查找。
- Space SDK選為Gradio,對應的Gradio template選為chatbot,如果是文生圖模型選為text-to-image。
- Space hardware選擇免費版即可,不過免費版在兩天閑置后就會陷入休眠,如長期使用可升級為收費版硬件。
- Preset Files為預置文件,如果通過Spaces主頁創建,則預置文件為空。權限選為Public。
操作完畢后,點擊Create Space進入Building&Starting界面,等待1分左右,就會創建成功,如下圖:
通過文生圖模型生成圖片后,再通過精細化模型對細節進行調整,最后呈現效果如下圖所示:
可以看到,熊貓和老虎的眼睛、嘴巴、爪子和瀑布、竹林、石頭的細節都得到了強化。您也可以用它來對老照片進行美化處理。
2. Hugging Face其他資源介紹
2.1 Hugging Face開源庫
2.2 Hugging Face Gradio工具
2.3 Hugging Face學習資源
2.3.1 NLP課程
2.3.2 擴散模型課程
2.3.3 深度強化學習課程
2.4 Hugging Face各個資源網址
3. 擴散模型原理
參考資料:
《擴散模型從原理到實戰》----李忻瑋,蘇步升,徐浩然,余海銘。人民郵電出版社