도메인별 데이터로 AI 파운데이션 모델을 활용하려는 조직에서는 기업용 생성형 AI 애플리케이션으로 빠르고 효율적으로 가치를 제공하기 위해 파인 튜닝된 모델을 신속하게 생성하고 배포하는 능력이 필수적입니다.
NVIDIA NIM은 파라미터 효율적인 파인 튜닝(PEFT)을 통해 사용자 정의 모델의 원활한 배포를 지원하며, 최신 AI 파운데이션 모델을 위한 사전 구축된 성능 최적화 추론 마이크로서비스를 제공합니다.
특정 상황에서는 지속적인 사전 학습, DPO(보강 학습), 감독 파인 튜닝(SFT) 또는 모델 병합 같은 방법이 적합할 수 있습니다. 이 방식들은 PEFT의 낮은 순위 적응(LoRA) 접근법과 달리, 학습이나 사용자 지정 과정에서 기본 모델의 가중치를 직접 조정합니다. 이러한 경우, 새로운 가중치에 최적화된 성능을 보장하기 위해 모델 추론 소프트웨어 구성을 업데이트해야 합니다.
NIM은 이 복잡한 과정을 간소화하여, 로컬 환경에서 조정된 모델과 GPU에 최적화된 TensorRT-LLM 추론 엔진 성능을 자동으로 구축합니다. 이후, 단일 단계의 모델 배포 프로세스에서 이를 로드해 추론 작업을 실행할 수 있습니다.
이 게시물에서는 로컬에서 빌드된 성능 최적화된 TensorRT-LLM 추론 엔진을 사용해 SFT로 사용자 정의된 모델을 NIM 마이크로서비스로 빠르게 배포하는 방법을 설명합니다. 필요한 모든 명령어와 몇 가지 유용한 옵션을 포함하고 있어 바로 적용해 볼 수 있습니다.
전제 조건
이 튜토리얼을 실행하려면 80GB의 GPU 메모리에 액세스할 수 있고 git-lfs가
설치된 NVIDIA 가속 컴퓨팅 환경이 필요합니다.
NVIDIA 가속 컴퓨팅 환경에서 NIM 마이크로서비스를 가져와 배포하기 전에 NGC API 키도 필요합니다.
- NVIDIA API 카탈로그에서 Meta Llama 3 8B Instruct 모델 목록으로 이동합니다.
- 오른쪽 상단에서 로그인을 선택하고 지침을 따릅니다.
- 로그인한 후 모델 페이지에서 이 NIM으로 빌드를 선택합니다.
- 자체 호스팅 API를 선택하고 두 옵션 중 하나를 따라 NIM 마이크로서비스 액세스에 액세스합니다:
- 연구, 개발 및 테스트용으로만 NIM에 무료로 액세스할 수 있는 NVIDIA 개발자 프로그램 멤버십.
- NVIDIA 엔터프라이즈 지원에 대한 액세스가 포함된 90일 NVIDIA AI 엔터프라이즈 라이선스.
선택한 액세스 방법에 필요한 세부 정보를 제공한 후 NGC API 키를 복사하고 NIM을 진행할 준비를 마칩니다. 자세한 내용은 LLM용 NVIDIA NIM 시작 을 참조하세요.
NIM 마이크로서비스 시작하기
NGC CLI API 키를 컴퓨팅 환경의 환경 변수로 설정하세요:
export NGC_API_KEY=<<YOUR API KEY HERE>>
또한 최적화 프로세스 중에 캐시로 사용할 디렉터리에 대한 권한을 지정하고, 생성하고, 수정해야 합니다:
export NIM_CACHE_PATH=/tmp/nim/.cache
mkdir -p $NIM_CACHE_PATH
chmod -R 777 $NIM_CACHE_PATH
NIM으로 파인 튜닝된 모델을 배포하려면, 로컬에서 구축되고 최적화된 TensorRT-LLM 추론 엔진이 필요하며, 이를 시연하려면 SFT(감독 파인 튜닝)를 통해 커스터마이징된 모델이 준비되어 있어야 합니다. 이 튜토리얼에서는 OpenMathInstruct-2 데이터 세트를 사용해 Meta의 Llama-3.1-8B를 커스터마이징한 NVIDIA OpenMath2-Llama3.1-8B 모델을 활용합니다.
기본 모델은 LLM용 다운로드 가능한 NIM으로 제공되어야 합니다. 다운로드 가능한 NIM 마이크로서비스에 대한 자세한 내용은 NVIDIA API 카탈로그에서 NIM 유형: Run Anywhere 필터를 확인하세요.
이 모델에 필요한 가중치는 여러 방법으로 확보할 수 있습니다. 이번 게시물에서는 다음 명령어를 사용해 모델 리포지토리를 복제하는 과정을 다룹니다:
git lfs install
git clone https://huggingface.co/nvidia/Llama-3.1-Nemotron-70B-Instruct-HF
export MODEL_WEIGHT_PARENT_DIRECTORY=$PWD
모델 가중치를 준비했으니 다음 단계로 넘어가 마이크로서비스를 실행해 보세요.
사용 가능한 성능 프로필에서 선택하기
선택한 모델과 하드웨어 구성에 따라 가장 적합한 추론 성능 프로필이 자동으로 선택됩니다. 로컬 추론 엔진 생성에 사용할 수 있는 성능 프로필은 아래 두 가지입니다:
- 지연 시간: 지연 시간 최적화를 중점으로 하는 NIM 마이크로서비스 제공.
- 처리량: 일괄 처리량 최적화를 중점으로 하는 NIM 마이크로서비스 제공.
지원되는 정밀도 및 기타 기능에 대한 자세한 내용은 NVIDIA NIM 설명서의 지원 매트릭스 항목을 참고하세요.
SFT 모델 사용 예제
다음 명령을 실행하여 로컬로 구축된 OpenMath2-Llama3.1-8B용 TensorRT-LLM 추론 엔진을 생성합니다:
docker run -it --rm --gpus all \
--user $(id -u):$(id -g)\
--network=host \
--shm-size=32GB \
-e NGC_API_KEY \
-e NIM_FT_MODEL=/opt/weights/hf/OpenMath2-Llama3.1-8B \
-e NIM_SERVED_MODEL_NAME=OpenMath2-Llama3.1-8B \
-v $NIM_CACHE_PATH:/opt/nim/.cache \
-v $MODEL_WEIGHT_PARENT_DIRECTORY:/opt/weights/hf \
nvcr.io/nim/meta/llama3_1-8b:1.3.0
이 명령은 NIM 마이크로서비스를 배포하는 데 사용하는 일반적인 명령과 거의 동일합니다. 이 경우에는 OpenMath2-Llama3.1-8B 모델을 가리키는 추가 NIM_FT_MODEL
매개 변수를 추가했습니다.
이를 통해 NIM은 로컬에서 최적화된 추론 엔진을 빌드합니다. 이 새로운 NIM 마이크로서비스를 사용하여 추론을 수행하려면 다음 Python 코드 예제를 실행하세요:
from openai import OpenAI
client = OpenAI(
base_url = "http://localhost:8000/v1",
api_key = "none"
)
completion = client.chat.completions.create(
model="OpenMath2-Llama3.1-8B",
messages=[{"role":"user","content":"What is your name?"}],
temperature=0.2,
top_p=0.7,
max_tokens=100,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
맞춤형 성능 프로필로 최적화된 TensorRT-LLM 엔진 구축하기
지원되는 GPU 에서 유사한 명령을 사용하여 NIM 마이크로서비스를 스핀업할 수 있습니다. 모델 프로필 지침에 따라 마이크로서비스를 시작하고 마이크로서비스에 액세스할 수 있는 프로필을 결정하세요.
export IMG_NAME="nvcr.io/nim/meta/llama-3.1-8b-instruct:1.3.0"
docker run --rm --runtime=nvidia --gpus=all $IMG_NAME list-model-profiles \
-e NGC_API_KEY=$NGC_API_KEY
H100 GPU를 사용 중이라고 가정하면 다음과 같은 프로필을 사용할 수 있습니다:
tensorrt_llm-h100-fp8-tp1-throughput
tensorrt_llm-h100-fp8-tp2-latency
명령을 다시 실행하고 추가 환경 변수를 제공하여 원하는 프로필을 지정합니다:
docker run --rm --runtime=nvidia --gpus=all $IMG_NAME list-model-profiles \
-e NGC_API_KEY=$NGC_API_KEY \
-e NIM_MODEL_PROFILE=tensorrt_llm-h100-fp8-tp2-latency
이제 원하는 프로필로 NIM 마이크로서비스를 다시 시작했으니 Python을 사용하여 모델과 상호 작용하세요:
from openai import OpenAI
client = OpenAI(
base_url = "http://localhost:8000/v1",
api_key = "none"
)
completion = client.chat.completions.create(
model="llama-3.1-8b-instruct",
messages=[{"role":"user","content":"What is your name?"}],
temperature=0.2,
top_p=0.7,
max_tokens=100,
stream=True
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
결론
모델 맞춤화를 위해 PEFT 또는 SFT 방법을 사용하든, NIM은 몇 가지 간단한 단계로 고성능 추론을 위한 맞춤형 모델 배포를 가속화합니다. 로컬 환경에 자동으로 구축된 최적화된 TensorRT-LLM 추론 엔진을 통해 NIM은 어디서나 가속화된 AI 추론을 신속하게 배포할 수 있는 새로운 가능성을 열어줍니다.
자세한 내용은 다음 리소스를 참조하세요:
- NVIDIA API 카탈로그
- NVIDIA NIM 설명서의파인 튜닝 모델 지원
NVIDIA 및 NIM 마이크로서비스 커뮤니티에 참여하려면 NVIDIA NIM 개발자 포럼 을 참조하세요.
관련 리소스
- GTC 세션: Kubernetes용 Oracle 컨테이너 엔진을 사용하여 OCI에서 Nemotron LLM을 파인 튜닝 및 배포하기(제공: Oracle)
- GTC 세션: 엔터프라이즈 가속화: 차세대 AI 배포를 위한 툴 및 기법(제공: Oracle)
- GTC 세션: 다양한 언어로 파운데이션 거대 언어 모델 커스터마이징하기(NVIDIA NeMo 제공)
- NGC 컨테이너: Phind-CodeLlama-34B-v2-Instruct
- NGC 컨테이너: Phi-3-Mini-4K-Instruct
- NGC 컨테이너: Mistral-NeMo-Minitron-8B-Instruct