계속해서 TensorRT-LLM에 대해 알아보고 있는 데, trtllm-build로 생성한 engine.plan`을 멀티 GPU에서 병렬로 실행하는 방법에 대해 좀 더 알아보자! 참고로 이 방법은 NVIDIA TensorRT-LLM의 텐서 병렬 (Tensor Parallelism) 기능을 사용해야 한다.
trtllm-build 시 --tp_size 옵션을 통해 GPU 수에 맞는 텐서 병렬 설정을 해야 함
--tp_size 2 → 2개의 GPU에서 병렬 실행을 위한 plan 생성
2. TensorRT-LLM Runtime API을 이용한 멀티 GPU 추론하기(multigpu-infer.py)
importtorchfromtensorrt_llm.runtimeimportModelRunnerBuilderfromtransformersimportLlamaTokenizer# 디바이스 개수 확인
num_gpus=torch.cuda.device_count()assertnum_gpus>=2,"두 개 이상의 GPU가 필요합니다."# Tokenizer 로드
tokenizer=LlamaTokenizer.from_pretrained("./tokenizer")prompt="Explain quantum computing in simple terms."input_ids=tokenizer.encode(prompt,return_tensors="pt")# 텐서 병렬을 위한 RunnerBuilder 생성
builder=ModelRunnerBuilder()builder.load("engine",rank=0,world_size=2)# rank는 아래에서 fork로 실행됨
# 추론 실행 (TP 병렬)
withbuilder.build()asrunner:outputs=runner.generate(input_ids=input_ids,max_new_tokens=64,temperature=0.7,top_p=0.9,)result=tokenizer.decode(outputs[0],skip_special_tokens=True)print("Generated:",result)
3. 멀티 GPU 실행 (예: 2GPU 기준)
torchrun --nproc_per_node=2 multigpu-infer.py
TensorRT-LLM은 내부적으로 torch.distributed 기반 MPI 방식으로 rank마다 실행해야 하므로, torchrun을 사용함
4. 주의 사항
항목
설명
--tp_size
torchrun에서 사용하는 --nproc_per_node와 반드시 동일해야 함
rank
builder.load("engine", rank=RANK, world_size=WORLD_SIZE) 형태로 각 프로세스별 지정 필요
댓글남기기