Snowflake 最近發布了 Arctic,這是他們的 混合專家 (MoE) 模型,可以處理 128 個 token,擁有大約 4790 億個參數,這使其成為執行大規模任務的高效模型。Arctic 旨在為各種應用程序和用例提供卓越的性能,包括 SQL 數據副駕駛和預測分析。
Arctic 的突出特點之一是它能夠跨多種硬件配置高效擴展,因此特別適合部署在高性能機器上,例如配備 8xH100 GPU 的 NVIDIA Cluster/Server。Arctic 的推理功能可與 Hugging Face、NVIDIA TensorRT 以及 vLLM 配合使用。通過采用 FP8 量化將浮點數的精度降低為 8 位格式,該模型可以在單個 GPU 實例上運行。雖然此設置尚未完全優化,但它可以在批處理大小為 1 的情況下實現超過每秒 70 個令牌的吞吐量。
準備好親自體驗Hugging Face 的 Snowflake-Arctic-instruct 模型了嗎?在本博客中,我們將引導您完成捷智算平臺的 8xH100裸機服務器上的環境設置、模型加載和推理執行。以下是在捷智算平臺上進行配置的步驟 。
一、配置
如果您尚未注冊捷智算平臺, 請先注冊。以下是我們將在本教程中使用的配置:
機器:8 xH100 裸機服務器
操作系統:Ubuntu 22.04 LTS
已安裝的軟件包:Nvidia-Cuda 12.1-toolkit、Python 3.10.*、Pytorch for Cuda 12.1
首先,使用以下命令檢查實例上 GPU 的詳細信息和 CUDA 版本:
請注意,在上面的屏幕截圖中,用于此測試的機器之前運行的是 Cuda 12.4,它遇到了 Cuda 可用的PyTorch版本的問題。
我們建議在 H100 GPU 上使用帶有 535 NVIDIA 驅動程序的 Cuda 12.1。要將 Cuda 版本降級到 12.1,首先需要刪除現有的 12.4 版 Cuda。
sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*"
"*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*"
sudo apt-get autoremove # To clean up the uninstall
清除后,重新安裝所需的nvidia-toolkit 。只需按照Ubuntu 22.04 的Nvidia-Cuda 12.1-toolkit說明進行操作即可。接下來,重新啟動計算機并運行nvidia-smi :它應該確認您的 Cuda 版本為 12.1。
二、安裝機器學習框架 Pytorch
我們需要安裝 Pytorch 庫來檢查 GPU 兼容性。
運行以下命令;
pip install torch torchvision torchaudio # Install Pytorch
要檢查它與您的 H100 GPU 的兼容性,可以使用以下方法:
>>> import torch
>>> use_cuda = torch.cuda.is_available()
此命令將返回一個布爾值(True/False),讓您知道 GPU 是否可用。如果為 false,則表示您的實例需要安裝 Nvidia 的 Fabric Manager。這是 8 路 A100 和 H100 系統所必需的。
Nvidia 的 Fabric Manager 是什么?
NVIDIA 的 Fabric Manager 是 NVIDIA 數據中心 GPU 管理生態系統的一部分,專門用于管理和優化服務器內或服務器網絡中 GPU 之間的連接和通信。該軟件在使用多個 GPU 處理復雜計算的大規模環境中起著至關重要的作用,例如在高性能計算 (HPC)、深度學習和其他數據密集型應用程序中。了解有關Nvidia 的 Fabric 管理器的更多信息。
在安裝 Fabric Manager 之前,需要先安裝 Nvidia 的數據中心 GPU 管理器 (DCGM) 庫。閱讀有關Nvidia 的 DCGM的更多信息。以下是在 Linux 機器上安裝 DCGM 的命令。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
$ sudo apt-get update && sudo apt-get install -y datacenter-gpu-manager # Install dcgm
以下是安裝 Fabric Manager 的步驟,安裝 Fabric Manager 后,重新啟動系統,運行以下命令啟動 NVIDIA Fabric Manager 服務:
sudo apt-get install -y cuda-drivers-fabricmanager-535
sudo systemctl --now enable nvidia-dcgm
dcgmi discovery -l
為了驗證安裝,我們使用 dcgmi 來查詢系統。您應該看到系統中所有受支持的 GPU(以及任何 NVSwitches)的列表,請參閱以下屏幕截圖:
現在運行剩余的命令來啟動結構管理器服務:
sudo systemctl start nvidia-fabricmanager
sudo systemctl status nvidia-fabricmanager
以下是正在運行的 Fabric Manager 服務的屏幕截圖:
讓我們快速測試 Pytorch 與我們的 GPU 的兼容性。
>> import torch
>>> use_cuda = torch.cuda.is_available()
>>> print(use_cuda)
上述命令現在應該返回 TRUE。
三、虛擬環境和庫
現在,讓我們啟動一個具有 root 訪問權限的虛擬環境,以使用 Snowflake 的 Arctic 模型設置推理。
使用以下命令安裝并激活虛擬環境:
# Create virtual environment
sudo apt install python3-venv
python3 -m venv <virtual-env-name>
source <v-env-name>/bin/activate #activates your virtual env.
請參閱Snowflake-arctic 在 Github 上的官方 repo來安裝所需的庫以及一些其他庫:
pip install deepspeed>=0.14.2
pip install transformers>=4.39.0
pip install huggingface_hub[hf_transfer]
pip install accelerate
pip install SentencePiece
pip install protobuf
pip install -U transformers # Upgrades transformers
通過安裝 Hugging Face CLI傳遞 Hugging Face READ令牌:
pip install huggingface-cli
huggingface-cli login
CLI 設置完成后,安裝 flash-attn 庫。
什么是 Flash Attention?
Transformer 架構的擴展主要受限于自注意力機制,這需要大量的時間和內存。硬件方面的最新改進提高了計算能力,但對內存或數據傳輸卻沒有多大幫助。這往往會導致注意力操作期間內存出現瓶頸。Flash Attention是一種旨在解決此問題的算法,它使擴展 Transformer 以加快訓練和推理速度變得更加容易。
pip install wheel
pip install flash-attn --no-build-isolation
如果上述命令沒有安裝flash-attn ,則克隆flash-attn repo 并按照README 文件中的步驟操作。
四、創建可執行文件
接下來,創建一個 Python 可執行文件來加載并運行 Arctic-Instruct 模型arctic-test.py。
import os
# enable hf_transfer for faster ckpt download
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
os.environ['HF_HOME'] = '/dev/shm'#Change the default root directory
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from deepspeed.linear.config import QuantizationConfig
tokenizer = AutoTokenizer.from_pretrained(
"Snowflake/snowflake-arctic-instruct",
trust_remote_code=True
)
quant_config = QuantizationConfig(q_bits=8)
# The 150GiB number is a workaround until we have HFQuantizer support, must be ~1.9x of the available GPU memory
model = AutoModelForCausalLM.from_pretrained(
"Snowflake/snowflake-arctic-instruct",
low_cpu_mem_usage=True,
trust_remote_code=True,
device_map="auto",
ds_quantization_config=quant_config,
max_memory={i: "150GiB" for i in range(8)},
torch_dtype=torch.bfloat16)
messages = [{"role": "user", "content": "What is 1 + 1 "}]
input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to("cuda")
outputs = model.generate(input_ids=input_ids, max_new_tokens=20)
print(tokenizer.decode(outputs[0]))
請注意,由于模型很大(大約空間~1000G),我們在 Python 腳本中通過使用 os.environ 映射對象提供了路徑,代表環境變量。請參閱第 4 行:
os.environ[ 'HF_HOME' ] = '/dev/shm'
否則,默認下載將轉到/root/.cache 。
通過運行df -h命令,我們可以選擇模型權重的下載路徑。否則,如果您沒有指定正確的路徑,可能會遇到磁盤空間問題。
五、故障排除
如果在執行上述 Python 文件時遇到此錯誤:
ImportError: cannot import name 'LlamaTokenizer' from 'transformers.models.llama'
然后,對tokenization_arctic.py進行更改:
nano /dev/shm/huggingface/modules/transformers_modules/Snowflake/snowflake-arctic-instruct/314d82d80be3cf48aedfe33c82513c030a1238d7/tokenization_arctic.py
并將標記化文件 tokenization_arctic.py 從:
transformers.models.llama import LlamaTokenizer
到
from transformers import LlamaTokenizer
使其看起來像這樣:
現在,當您執行 Python 腳本時,我們可以看到正在下載模型權重。請注意,下載可能需要最多 20 分鐘才能完成。
python3 arctic-test.py
一旦模型下載完畢,fp_quantizer 就會加載到環境中,幾秒鐘內我們就會看到我們的模型正在運行推理。
模型推理的輸出:
<|im_start|> user
What is 1 + 1 <|im_end|>
<|im_start|>assistant
1 + 1 equals 2.<|im_end|>
如果您看到警告 — 注意掩碼和 pad token id 未設置。因此,您可能會觀察到意外行為。請傳遞輸入的“attention_mask”以獲得可靠的結果。可以通過在generation_config中設置pad_token_id來解決。對于在Hugging Face上完成的任何文本生成任務,此警告很常見。這里有一個解釋。
就是這樣,您現在正在捷智算平臺的 8 x H100裸機服務器上對 Snowflake-Arctic-instruct 模型進行推理。
為您的 AI 驅動業務釋放 Snowflake Arctic 的強大力量。立即開始在捷智算平臺上部署 Arctic !