Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

개발용 Nvidia GH200 설정하기

Nvidia GH200을 처음부터 설정하는 일은 다소 까다롭습니다. 결국 CUDA 12.4와 FlashAttention-2로 작동하게 만들었지만, 어느 정도 시행착오를 거쳐야 했습니다. 제가 한 작업은 다음과 같습니다.

GH200은 64K 커널 페이지 크기에서 최적의 성능을 발휘합니다. Nvidia는 Ubuntu 시스템용 전용 커널 패키지를 제공합니다. 먼저 기존 커널 패키지를 제거하고 Nvidia 64K 커널을 설치하십시오.

sudo DEBIAN_FRONTEND=noninteractive apt purge linux-image-$(uname -r) \
    linux-headers-$(uname -r) linux-modules-$(uname -r) -y
sudo apt update
sudo apt install linux-nvidia-64k-hwe-22.04 -y
sudo reboot now

시스템이 재부팅되면 올바른 커널을 사용하고 있는지 확인하십시오.

uname -r

다음과 같이 표시되어야 합니다.

linux-nvidia-64k-hwe-22.04-555.42.06

이제 기본 시스템을 업데이트합시다.

apt-get update

GH200에는 특정 NVIDIA 드라이버와 MLNX_OFED 드라이버가 필요합니다. 다음 패키지를 설치하십시오. 여기서는 순서가 매우 중요합니다!

apt-get install -y mlnx-fw-updater mlnx-ofed-all
apt-get install -y cuda-drivers-555 nvidia-kernel-open-555 linux-tools-$(uname -r)
apt-get install -y cuda-toolkit nvidia-container-toolkit

NVIDIA persistence 데몬이 persistence 모드를 사용하도록 구성해야 합니다.

sudo mkdir /lib/systemd/system/nvidia-persistenced.service.d
sudo dd status=none of=/lib/systemd/system/nvidia-persistenced.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=/usr/bin/nvidia-persistenced --persistence-mode --verbose
[Install]
WantedBy=multi-user.target
EOF
systemctl enable nvidia-persistenced --now

새 프로필 스크립트를 만들어 CUDA 경로를 구성하십시오.

echo "# Library Path for Nvidia CUDA" >> /etc/profile.d/cuda.sh
echo export LD_LIBRARY_PATH=/usr/local/cuda/lib64:'$LD_LIBRARY_PATH' >> /etc/profile.d/cuda.sh
echo export PATH=$HOME/.local/bin:/usr/local/cuda/bin:'$PATH' >> /etc/profile.d/cuda.sh

최적의 성능을 위해 IRQ balance 서비스를 비활성화하고 NUMA 설정을 구성하십시오.

systemctl disable irqbalance
echo "kernel.numa_balancing = 0" >> /etc/sysctl.conf
sysctl -p

이제 NVIDIA peer memory 모듈을 시스템에 추가하여 피어 메모리 접근을 활성화합시다.

echo "nvidia-peermem" >> /etc/modules-load.d/nvidia-peermem.conf

모듈이 로드되었는지 확인하십시오.

lsmod | grep nvidia_peermem

모든 구성을 마친 후 시스템을 재부팅하십시오.

systemctl disable first-boot.service
reboot

시스템이 재부팅되면 다음 명령을 실행하여 설치를 확인하십시오.

nvidia-smi

이 명령은 GPU 모델, 드라이버 버전, 현재 사용률을 포함한 GH200 정보를 표시해야 합니다.

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 555.42.06              Driver Version: 555.42.06      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| 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  NVIDIA GH200 480GB             On  |   00000009:01:00.0 Off |                    0 |
| N/A   33C    P0             76W /  900W |       1MiB /  97871MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

시스템 토폴로지를 살펴보면 GPU와 네트워킹 구성 요소 사이에서 데이터가 어떻게 이동하는지 파악할 수 있습니다.

nvidia-smi topo -m

이 명령은 GPU와 다른 PCIe 장치 사이의 연결 행렬을 보여 줍니다. GH200의 경우 다음과 비슷한 내용이 표시되어야 합니다.

    GPU0      NIC0    NIC1    CPU Affinity    NUMA Affinity    GPU NUMA ID
GPU0     X     NODE    NODE    0-71            1
NIC0    NODE    X      PIX
NIC1    NODE   PIX     X

Legend:
X    = Self
SYS  = Connection traversing PCIe as well as the SMB interconnect between NUMA nodes (e.g., QPI/UPI)
NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
PIX  = Connection traversing at most a single PCIe bridge
NV#  = Connection traversing a bonded set of # NVLinks

NIC Legend:
NICO: mlx5_0
NIC1: mlx5_1

Flash 어텐션으로 vLLM 설정하기

먼저 Python 패키지 관리 도구를 업데이트하십시오.

python -m pip install -U pip
python -m pip install -U setuptools wheel

CUDA 12.4를 지원하는 PyTorch를 설치하십시오.

pip install torch --index-url https://download.pytorch.org/whl/cu124

Flash 어텐션을 설치하십시오:

pip install flash-attn --no-build-isolation

Flash 어텐션을 지원하도록 vLLM을 클론하고 빌드하십시오:

git clone git@github.com:vllm-project/vllm.git
cd vllm
sudo docker build --target build -t vllm_build .
container_id=$(sudo docker create --name vllm_temp vllm_build:latest)
sudo docker cp ${container_id}:/workspace/dist .

# Install vLLM with Flash Attention
pip install vllm-flash-attn
pip install dist/vllm-0.4.2+cu124-cp312-cp312-linux_x86_64.whl

소스에서 xformers를 설치하십시오.

pip install ninja
# Set TORCH_CUDA_ARCH_LIST if running and building on different GPU types
pip install -v -U git+https://github.com/facebookresearch/xformers.git@main#egg=xformers

~/.bashrc에 다음 내용을 추가하여 환경 변수를 설정하십시오.

export HF_TOKEN=<HF-TOKEN>
export HF_HOME="/home/ubuntu/.cache/huggingface"
export MODEL_REPO=meta-llama/Meta-Llama-3.1-70B-Instruct

변경 사항을 적용하십시오.

source ~/.bashrc

다음 명령으로 vLLM API 서버를 실행하십시오:

vllm serve $MODEL_REPO --dtype auto

이제 http://localhost:8000/v1/completions의 API 엔드포인트로 요청을 보낼 수 있습니다.

FlashInfer와 함께 sglang 설정하기

또는 SGLang과 FlashInfer를 사용하여 서빙할 수도 있습니다.

# Use the last release branch
git clone -b v0.3.5.post2 https://github.com/sgl-project/sglang.git
cd sglang

pip install -e "python[all]"

pip install flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/

다음 명령으로 SGLang 서버를 실행하십시오:

python -m sglang.launch_server --model-path meta-llama/Meta-Llama-3.1-70B-Instruct

마찬가지로 OpenAI API 형식을 사용하여 http://localhost:8000/v1/completions의 API 엔드포인트로 요청을 보낼 수 있습니다.


원문 © Stephen Diehl, stephendiehl.com · 글 CC BY-SA 4.0, 코드 MIT · Stephen Diehl은 런던의 소프트웨어 엔지니어이자 작가입니다(저자가 정한 소개 문구). 이 글은 저자가 개인 자격으로 쓴 것이며 어떤 조직과의 연관도 밝히거나 암시해서는 안 됩니다 (라이선스와 고지).
이 페이지는 원문을 한국어로 옮기며 변경한 비공식 번역이며 같은 CC BY-SA 4.0으로 제공합니다 · yeokja 한국어 번역 · Anthropic 사의 claude-opus-5-5 모델을 활용하여 번역되었으며 학습을 모두 비허용한 상태로 작업하였습니다.