Chitu(Red Rabbit): 칭화 팀의 고성능 대규모 언어 모델 추론 프레임워크

堆友AI

일반 소개

Chitu는 칭화대학교의 PACMAN 팀이 개발한 오픈 소스 추론 프레임워크로, 대규모 언어 모델을 실행하기 위해 특별히 설계된 "Red Rabbit"이라고 불립니다. Chitu는 NVIDIA의 GPU와 국산 칩 등 다양한 하드웨어를 지원하며, 독립형부터 대규모 클러스터까지 사용할 수 있습니다.특히 FP8 모델을 사용한 추론은 비용을 획기적으로 절감할 수 있는데, GPU를 절반만 사용하고 vLLM보다 3배 이상 빠른 A800에서 DeepSeek-671B를 실행하는 것이 대표적입니다.이 코드는 GitHub에서 공개적으로 사용 가능하며 기업이나 개인이 무료로 다운로드하여 사용할 수 있습니다. 이 도구는 프로덕션 환경에서 바로 사용할 수 있는 도구로, 비용을 절감하면서도 성능을 원하는 팀에 적합합니다.

Chitu(赤兔):清华团队推出的高性能大语言模型推理框架

 

기능 목록

  • FP8 및 BF16 모델 추론을 지원하며, 저비용 고성능으로 구형 GPU 및 국산 칩에서도 실행할 수 있습니다.
  • 순수 CPU부터 NVIDIA A800, H20 등의 GPU, 대규모 클러스터에 이르기까지 다양한 하드웨어에 적응할 수 있습니다.
  • CUDA 그래프로 추론 속도를 최적화하여 한 번의 요청으로 더 빠른 결과를 얻을 수 있습니다.
  • HTTP 요청을 통해 모델을 직접 호출할 수 있는 서비스 인터페이스를 제공합니다.
  • 대용량 작업 처리에 적합한 다중 노드 분산 추론을 지원합니다.
  • 기업이 필요에 따라 변경하거나 최적화할 수 있는 오픈 소스 코드입니다.

 

도움말 사용

설치 프로세스

Chitu 설치는 복잡하지는 않지만 약간의 준비가 필요합니다. 자세한 단계는 다음과 같습니다:

  1. 환경 준비하기
    • 시스템: 우분투 22.04 권장, NVIDIA GPU(예: A800 또는 H20)가 탑재된 컴퓨터.
    • 소프트웨어: Git, Python 3.10, CUDA 12.1(사용 중인 GPU 버전에 맞게 조정), PyTorch 2.1을 설치합니다.
    • 명령 예제:
      sudo apt update && sudo apt install -y git python3.10 python3-pip
      pip install -U torch==2.1 --index-url https://download.pytorch.org/whl/cu121
      
  2. 코드 다운로드
    • Git을 사용하여 로컬에서 Chitu의 코드를 복제합니다:
      git clone --recursive https://github.com/thu-pacman/chitu
      cd chitu
      
  3. 종속성 설치
    • 필요한 Python 패키지와 컴파일 환경을 설치합니다:
      pip install -r requirements-build.txt
      pip install flash-attn
      
  4. 컴파일 및 설치
    • 컴파일 파라미터를 설정하고(GPU에 따라 TORCH_CUDA_ARCH_LIST를 조정합니다(예: A800의 경우 8.0)) 컴파일합니다:
      TORCH_CUDA_ARCH_LIST=8.0 CHITU_SETUP_JOBS=4 MAX_JOBS=4 pip install --no-build-isolation .
      
  5. 설치 확인
    • 테스트를 실행하여 문제가 없는지 확인합니다:
      torchrun --nproc_per_node 1 test/single_req_test.py
      

사용 방법

Chitu가 로드되면 명령줄에서 서비스를 시작하거나 단일 테스트를 실행할 수 있습니다. 방법은 다음과 같습니다:

추론 서비스 시작

  1. 모델 경로 구성
    • 모델 파일(예: DeepSeek-R1)을 로컬 디렉터리에 준비합니다(예 /data/DeepSeek-R1).
    • 편집 명령에서 models.ckpt_dir 매개변수는 모델 경로를 가리킵니다.
  2. 서비스 시작
    • 포트 21002에서 수신 대기 중인 토치런으로 독립 실행형 서비스를 시작하세요:
      export WORLD_SIZE=1
      torchrun --nproc_per_node 1 chitu/serve.py \
      serve.port=21002 \
      models=DeepSeek-R1 \
      models.ckpt_dir=/data/DeepSeek-R1 \
      infer.use_cuda_graph=True \
      request.max_new_tokens=100
      
  3. 테스트 서비스
    • 컬을 사용하여 요청을 보내고 모델이 제대로 응답하는지 확인합니다:
      curl localhost:21002/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{"messages": [{"role": "user", "content": "你好,Chitu 是什么?"}]}'
      
    • 반환 결과는 모델의 답변이 포함된 JSON 형식입니다.

단일 추론 테스트 실행

  • 서비스를 시작하지 않으려면 모델 출력을 테스트하기만 하면 됩니다:
    torchrun --nproc_per_node 1 test/single_req_test.py \
    models=DeepSeek-R1 \
    models.ckpt_dir=/data/DeepSeek-R1 \
    request.max_new_tokens=64
  • 출력은 터미널에 표시되어 모델이 생성한 내용을 알려줍니다.

다중 노드 분산 추론

  1. 여러 대의 컴퓨터 준비
    • 각 머신에 Chitu 및 종속성이 로드되어 있고 모델 파일이 공유 스토리지에 있는지 확인합니다.
  2. 분산 서비스 시작
    • 각각 8개의 GPU가 장착된 2대의 머신에서 실행하세요:
      torchrun --nnodes 2 --nproc_per_node 8 test/single_req_test.py \
      request.max_new_tokens=64 \
      infer.pp_size=2 \
      infer.tp_size=8 \
      models=DeepSeek-R1 \
      models.ckpt_dir=/data/DeepSeek-R1
      
  3. 효과 확인
    • 멀티 노드 실행 후 출력은 단일 머신보다 빨라져 대량의 요청을 처리하는 데 적합합니다.

주요 기능 작동

FP8 모델로 비용과 속도 절약

  • Chitu는 GPU 사용량이 적고 BF16보다 빠른 FP8 형식 모델을 지원합니다.
  • 작동: 시작 시 추가 infer.soft_fp8=True예를 들어 모델이 FP8 형식인 경우 모델은 FP8 형식이어야 합니다. 예를 들어
    torchrun --nproc_per_node 1 chitu/serve.py \
    serve.port=21002 \
    models=DeepSeek-R1 \
    models.ckpt_dir=/data/DeepSeek-R1 \
    infer.soft_fp8=True
    

CUDA 그래프로 가속화

  • 파라미터를 추가하여 CUDA 그래프로 단일 요청을 가속화할 수 있습니다. infer.use_cuda_graph=True.
  • 테스트 효과: 단일 추론을 실행하고 추가 유무에 따른 속도 차이를 비교합니다.

성능 테스트

  • Chitu에는 처리량과 지연 시간을 측정하는 벤치마킹 도구가 함께 제공됩니다:
    python benchmarks/benchmark_serving.py \
    --model "deepseek-r1" \
    --iterations 10 \
    --seq-len 10 \
    --base-url http://localhost:21002
    
  • 결과는 다음과 같이 표시됩니다. 토큰 숫자를 입력하면 할당량을 최적화하는 데 도움이 됩니다.

주의

  • 여러 노드를 사용하는 경우 네트워크가 안정적이어야 하며, 그렇지 않으면 네트워크가 끊어집니다.
  • GPU 메모리가 부족하면 OOM 오류가 발생할 수 있으므로 메모리를 낮추세요. infer.max_seq_len 또는 더 적은 수의 노드로.
  • 국내 칩 지원은 아직 최적화 중이므로 코드를 변경하여 적용해야 할 수 있습니다.

Chitu는 사용하기 어렵지 않으며, 단계를 따르기만 하면 바로 실행할 수 있습니다. 문서와 커뮤니티도 GitHub에 있으므로 궁금한 점이 있으면 문제를 제기할 수 있습니다.

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...