DeepGEMM: FP8 매트릭스 연산을 효율적으로 지원하는 오픈 소스 라이브러리 (딥시크 오픈 소스 주간 3일차)

최신 AI 리소스6개월 전 업데이트 AI 공유 서클
1.8K 00

일반 소개

DeepGEMM은 다음과 같은 시스템입니다. DeepSeek 개발팀이 개발한 오픈 소스 FP8 GEMM(일반화된 행렬 곱셈) 라이브러리는 효율적인 행렬 연산 지원에 중점을 두고 있습니다. 이 라이브러리는 엔비디아 호퍼 아키텍처의 텐서 코어를 위해 특별히 설계되었으며 일반적인 행렬 연산과 혼합 전문가 모델(MoE)을 위한 그룹화된 GEMM 연산을 지원합니다. CUDA로 작성된 이 라이브러리는 경량 JIT(Just-In-Time) 컴파일을 사용하여 런타임 커널 컴파일되므로 설치 시 사전 컴파일이 필요 없고 배포 프로세스가 크게 간소화되며, DeepGEMM은 깔끔한 코드를 유지하면서 뛰어난 성능을 제공하여 호퍼 GPU에서 1,350 TFLOPS 이상의 FP8 연산 성능을 달성할 수 있습니다. 머신 러닝 모델 훈련 및 추론 가속화에 적합할 뿐만 아니라 오픈 소스 특성 및 접근성으로 인해 FP8 행렬 최적화 학습에 탁월한 리소스이기도 합니다.

DeepGEMM:高效支持FP8矩阵运算的开源库(DeepSeek 开源周第三天)

 

기능 목록

-FP8 매트릭스 작업 지원고성능 컴퓨팅 시나리오를 위한 효율적인 FP8 일반화 행렬 곱셈(GEMM)을 제공합니다.
-MoE 모델 최적화하이브리드 전문가 모델에 대한 그룹화된 GEMM 지원(M축에 대해서만 그룹화), 적응 전문가가 동일한 씬의 모양을 공유하는 경우.
-JIT(Just-In-Time) 컴파일사전 컴파일 없이 런타임에 커널을 컴파일하여 다양한 하드웨어 환경에 적응할 수 있습니다.
-고성능 컴퓨팅(HPC)NVIDIA Hopper GPU에서 1350 TFLOPS 이상의 FP8 컴퓨팅 처리량 달성.
-간단한 코드 디자인약 300줄의 핵심 코드, 배우기 쉽고 2차 개발이 용이합니다.
-높은 호환성다양한 추론 시나리오에 적합한 일반 GEMM과 마스크가 있는 패킷 GEMM을 모두 지원합니다.
-오픈 소스 및 무료연구 및 상업적 사용을 위해 MIT 프로토콜에 따라 게시되었습니다.

도움말 사용

DeepGEMM은 개발자를 위해 설계된 오픈 소스 행렬 연산 라이브러리로, 주로 기본적인 CUDA 프로그래밍 및 머신 러닝 배경 지식이 있는 사용자를 위해 개발되었습니다. 다음은 빠르게 시작하고 프로젝트에 통합하는 데 도움이 되는 자세한 가이드입니다.

설치 프로세스

DeepGEMM은 복잡한 사전 컴파일 과정이 필요하지 않으며 몇 단계만 거치면 설치 및 런타임 환경 구성이 가능합니다:
1.환경 준비::

  • 시스템 요구 사항: NVIDIA Hopper 아키텍처를 지원하는 GPU(예: H100).
  • 소프트웨어 종속성: CUDA 툴킷(권장 버전 11.8 이상) 및 Python(3.8 이상)을 설치합니다.
  • 하드웨어 지원: 장치에 40GB 이상의 비디오 메모리가 있는 NVIDIA GPU가 장착되어 있는지 확인하세요.
    2.클론 창고::
    터미널에서 다음 명령을 실행하여 DeepGEMM 리포지토리를 로컬로 다운로드합니다:
git clone https://github.com/deepseek-ai/DeepGEMM.git**
cd DeepGEMM**
  1. 종속성을 설치합니다:
    Python의 패키지 관리 도구를 사용하여 필요한 종속 요소를 설치하세요:
pip install torch numpy

DeepGEMM 자체는 온더플라이 컴파일 기술을 사용하고 모든 커널이 런타임에 자동으로 생성되므로 추가 컴파일이 필요하지 않습니다.
4. 설치를 확인합니다:
제공된 테스트 스크립트를 실행하여 환경이 올바르게 구성되었는지 확인합니다:

python test/deep_gemm_test.py

출력에 정상적인 행렬 연산 결과가 표시되면 설치에 성공한 것입니다.

주요 기능

1. 기본 FP8 GEMM 작업을 수행합니다.

DeepGEMM은 그룹화되지 않은 FP8 행렬 곱셈을 수행하기 위한 사용하기 쉬운 인터페이스를 제공합니다:

  • 운영 절차:
    • 라이브러리 및 함수 가져오기:
import torch
from deep_gemm import gemm_fp8_fp8_bf16_nt
  • 입력 데이터를 준비합니다(행렬 A와 B, FP8 형식이어야 함):
A = torch.randn(1024, 512, dtype=torch.float8_e4m3fn).cuda()
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
  • 함수를 호출하여 행렬 곱셈을 수행합니다:
C = gemm_fp8_fp8_bf16_nt(A, B)
print(C)
  • 주의:
    • 입력 매트릭스는 GPU에 있어야 하며 FP8 형식(E4M3 또는 E5M2)이어야 합니다.
    • 출력은 BF16 형식으로, 후속 계산이나 저장에 적합합니다.

2. MoE 모델을 지원하기 위한 GEMM 그룹화

MoE 모델로 작업해야 하는 사용자를 위해 DeepGEMM은 그룹화된 GEMM 지원을 제공합니다:

  • 운영 절차:
    • GEMM 함수 그룹화 가져오기:
from deep_gemm import m_grouped_gemm_fp8_fp8_bf16_nt_contiguous
  • 연속 레이아웃을 위한 입력 데이터를 준비합니다:
A = torch.randn(4096, 512, dtype=torch.float8_e4m3fn).cuda()  # 多个专家的输入拼接
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
group_sizes = [1024, 1024, 1024, 1024]  # 每个专家的 token
  • 그룹 GEMM을 수행합니다:
C = m_grouped_gemm_fp8_fp8_bf16_nt_contiguous(A, B, group_sizes)
print(C)
  • 주의:
    • 입력 행렬 A의 M축은 전문가에 의해 그룹화되어야 하며 각 그룹의 크기는 GEMM M 블록 크기(사용 가능)에 맞춰야 합니다. get_m_alignment_for_contiguous_layout() (액세스).
    • B 행렬의 N축과 K축을 고정해야 합니다.

3. 추론 단계에서의 마스크 그룹화 GEMM

추론 디코딩 단계에서 DeepGEMM은 동적 토큰 할당을 위해 마스크를 사용하여 그룹화된 GEMM을 지원합니다:

  • 운영 절차:
    • 마스크 그룹화 기능을 가져옵니다:
from deep_gemm import m_grouped_gemm_fp8_fp8_bf16_nt_masked
  • 입력 데이터와 마스크를 준비합니다:
A = torch.randn(4096, 512, dtype=torch.float8_e4m3fn).cuda()
B = torch.randn(512, 1024, dtype=torch.float8_e4m3fn).cuda()
mask = torch.ones(4096, dtype=torch.bool).cuda()  # 掩码指示有效 token
  • 마스크 그룹화 GEMM을 수행합니다:
C = m_grouped_gemm_fp8_fp8_bf16_nt_masked(A, B, mask)
print(C)
  • 주의:
    • 마스크는 계산이 필요한 토큰을 지정하는 데 사용되며 CUDA 그래프가 활성화된 경우 동적 추론에 적합합니다.

주요 기능 작동 절차

고성능 최적화 및 디버깅

개발자가 아래 단계에 따라 더욱 최적화하고 디버깅할 수 있는 효율성과 단순성이 DeepGEMM의 핵심 강점입니다:

  • 성능 데이터 보기:
    테스트 스크립트를 실행할 때 TFLOPS를 모니터링하기 위해 로그 출력을 추가합니다:

    import logging
    logging.basicConfig(level=logging.INFO)
    C = gemm_fp8_fp8_bf16_nt(A, B)
    

조정 매개변수*:
데이터 이동 및 계산 중첩을 최적화하기 위해 특정 하드웨어에 맞게 블록 크기(TMA 매개변수)를 조정하려면 문서의 test/ 폴더에 있는 예시를 참조하세요.
학습 및 확장*:
핵심 코드는 약 300줄의 deep_gemm/gemm_kernel.cu에 있으며, 개발자는 이를 직접 읽고 사용자 정의 요구 사항에 맞게 수정할 수 있습니다.
사용 권장 사항
하드웨어 요구 사항*참고: 현재 NVIDIA 호퍼 아키텍처 GPU만 지원하며, 다른 아키텍처는 아직 지원되지 않습니다.
문서 참조*참고: 자세한 함수 설명과 샘플 코드는 GitHub 리포지토리의 README.md 및 test/ 폴더에서 확인할 수 있습니다.
커뮤니티 지원*: 문제가 발생하면 GitHub 이슈 페이지에서 피드백을 제출하면 DeepSeek 팀에서 긍정적으로 답변해 드립니다.
이 단계를 통해 DeepGEMM을 머신 러닝 프로젝트에 쉽게 통합하고 효율적인 FP8 매트릭스 컴퓨팅 성능을 활용할 수 있습니다.

© 저작권 정책

관련 문서

댓글 없음

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