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

기능 목록
-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**
- 종속성을 설치합니다:
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축을 고정해야 합니다.
- 입력 행렬 A의 M축은 전문가에 의해 그룹화되어야 하며 각 그룹의 크기는 GEMM M 블록 크기(사용 가능)에 맞춰야 합니다.
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 매트릭스 컴퓨팅 성능을 활용할 수 있습니다.
© 저작권 정책
기사 저작권 AI 공유 서클 모두 무단 복제하지 마세요.
관련 문서
댓글 없음...