TRL documentation
학습 속도 향상
학습 속도 향상
이 가이드는 TRL에서 학습을 가속화하는 다양한 방법을 다룹니다. 각 기법은 더 포괄적인 문서로 연결되는 최소한의 예제를 포함합니다.
온라인 방법에서 빠른 생성을 위한 vLLM
GRPO나 Online DPO와 같은 Online methods는 모델이 completions을 생성해야 하며, 이는 종종 느린 과정으로 학습 시간에 상당한 영향을 미칠 수 있습니다. 생성을 가속화하려면 PagedAttention 등을 통해 빠른 생성을 가능하게 하는 라이브러리인 vLLM을 사용할 수 있습니다. TRL의 online trainers는 vLLM을 지원하여 학습 속도를 크게 향상시킵니다. 자세한 내용은 vLLM Integration을 참고하세요.
vLLM를 사용하려면 다음을 사용하여 먼저 설치하세요:
pip install trl[vllm]
먼저 다음을 실행하여 vLLM 서버를 시작합니다:
VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \
--weight-transfer-config '{"backend": "nccl"}' \
--logprobs-mode processed_logprobs \
--max-logprobs -1그 다음, 학습 스크립트를 실행하고 학습 인자에 use_vllm=True를 전달합니다.
from trl.experimental.online_dpo import OnlineDPOConfig
training_args = OnlineDPOConfig(..., use_vllm=True, vllm_mode="server")먼저 다음을 실행하여 vLLM 서버를 시작합니다:
VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \
--weight-transfer-config '{"backend": "nccl"}' \
--logprobs-mode processed_logprobs \
--max-logprobs -1그 다음, 학습 스크립트를 실행하고 학습 인자에 use_vllm=True를 전달합니다.
from trl import GRPOConfig
training_args = GRPOConfig(..., use_vllm=True, vllm_mode="server")추가 인수를 전달하여 서버 구성을 사용자 지정할 수 있습니다. 자세한 내용은 vLLM 통합을 참조하세요.
vLLM을 사용할 경우, 리소스 충돌을 방지하기 위해 학습과 생성에 할당된 GPU가 서로 분리되어 있는지 확인하세요. 예를 들어, 학습에 GPU 4개, vLLM 생성에 GPU 4개를 사용할 계획이라면
CUDA_VISIBLE_DEVICES를 사용하여 GPU 할당을 지정할 수 있습니다.vLLM 생성에 0-3 GPU를 설정합니다:
CUDA_VISIBLE_DEVICES=0,1,2,3 VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \ --weight-transfer-config '{"backend": "nccl"}' \ --logprobs-mode processed_logprobs \ --max-logprobs -1학습을 위한 GPU 4-7:
CUDA_VISIBLE_DEVICES=4,5,6,7 torchrun --nproc_per_node 4 train.py
먼저 다음을 실행하여 vLLM 서버를 시작합니다:
VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \
--weight-transfer-config '{"backend": "nccl"}' \
--logprobs-mode processed_logprobs \
--max-logprobs -1그 다음, 학습 스크립트를 실행하고 학습 인자에 use_vllm=True를 전달합니다.
from trl import RLOOConfig
training_args = RLOOConfig(..., use_vllm=True, vllm_mode="server")추가 인수를 전달하여 서버 구성을 사용자 지정할 수 있습니다. 자세한 내용은 vLLM 통합을 참조하세요.
vLLM을 사용할 경우, 리소스 충돌을 방지하기 위해 학습과 생성에 할당된 GPU가 서로 분리되어 있는지 확인하세요. 예를 들어, 학습에 GPU 4개, vLLM 생성에 GPU 4개를 사용할 계획이라면
CUDA_VISIBLE_DEVICES를 사용하여 GPU 할당을 지정할 수 있습니다.vLLM 생성에 0-3 GPU를 설정합니다:
CUDA_VISIBLE_DEVICES=0,1,2,3 VLLM_SERVER_DEV_MODE=1 vllm serve <model_name> \ --weight-transfer-config '{"backend": "nccl"}' \ --logprobs-mode processed_logprobs \ --max-logprobs -1학습을 위한 GPU 4-7:
CUDA_VISIBLE_DEVICES=4,5,6,7 torchrun --nproc_per_node 4 train.py
최적화된 어텐션 구현
TRL은 메모리 사용량을 줄이면서 학습 속도를 크게 높일 수 있는 다양한 최적화된 attention 구현을 지원합니다. Kernels Hub에서 바로 사용할 수 있는 사전 최적화된 커널을 사용하거나, 수동으로 빌드한 attention 백엔드를 사용할 수 있습니다.
Hub에서 수동 컴파일 없이 사전 최적화된 어텐션 커널을 사용할 수 있습니다:
from trl import SFTConfig
training_args = SFTConfig(..., model_init_kwargs={"attn_implementation": "kernels-community/flash-attn2"})다른 옵션으로는 kernels-community/vllm-flash-attn3와 kernels-community/paged-attention가 있습니다.
최적화된 attention은 모든 TRL trainer에서 작동합니다. 자세한 내용은 Kernels Hub Integration을 참조하세요.
최적화된 attention 백엔드를 수동으로 구축하는 것은 복잡하고 시간이 많이 소요됩니다. 절대적으로 필요한 경우가 아니라면 권장하지 않습니다. 이전 섹션에서 설명한 대로, 대신 Hub의 Kernels 사용을 고려해 보세요.
Flash Attention 2와 같은 최적화된 어텐션 백엔드를 수동으로 설치한 경우, 학습 인자에서 이를 지정할 수 있습니다:
from trl import SFTConfig
training_args = SFTConfig(..., model_init_kwargs={"attn_implementation": "flash_attention_2"})혼합 정밀도 학습
bf16 또는 fp16을 사용한 혼합 정밀도 학습은 모델 품질에 거의 영향을 미치지 않으면서도 학습 속도를 높이고 메모리 사용량을 줄일 수 있습니다.
from trl import SFTConfig
training_args = SFTConfig(..., bf16=True) # or fp16=True for older GPUsAmpere GPU(A100, RTX 30xx) 또는 그 이후의 GPU에는 bf16=True를, 이전 GPU에는 fp16=True를 사용하세요. 혼합 정밀도 학습은 모든 TRL trainer에서 지원됩니다.