[sglang] sglang, GLM-5.1-FP8 모델 성능 및 정확도 벤치마크 추가: AMD GPU 환경에서의 최적화 분석
PR 링크: sgl-project/sglang#22336 상태: Merged | 변경: +None / -None
들어가며
최근 대규모 언어 모델(LLM)의 발전 속도는 눈부십니다. 이러한 모델들을 효율적으로 서빙하고 성능을 극대화하는 것은 LLM 인프라스트럭처의 핵심 과제입니다. sglang은 LLM 서빙을 위한 고성능 프레임워크로, 다양한 하드웨어 및 모델에 대한 최적화를 지속적으로 수행하고 있습니다.
이번 분석 대상인 GitHub Pull Request(PR)는 sglang 레포지토리에서 GLM-5.1-FP8 모델에 대한 AMD GPU(MI30x, MI35x) 환경에서의 야간 벤치마크(nightly benchmarks)를 추가하는 내용을 담고 있습니다. 이 PR은 단순히 새로운 모델과 하드웨어 조합에 대한 테스트를 추가하는 것을 넘어, 기존 테스트 설정과의 비교 및 잠재적인 최적화 기회를 탐색하는 데 중요한 단서를 제공합니다.
본 글에서는 이 PR의 코드 변경 사항을 상세히 분석하고, 각 변경이 왜 중요하며 어떤 의미를 가지는지 기술적인 관점에서 설명하고자 합니다. 특히, CI/CD 워크플로우 설정 변경, 모델 및 하드웨어별 테스트 스크립트 추가, 그리고 리뷰 과정에서 논의된 내용들을 중심으로 살펴보겠습니다.
코드 분석
이 PR의 핵심 변경 사항은 주로 GitHub Actions 워크플로우 파일(.github/workflows/)의 수정과 새로운 테스트 파일 추가에 집중되어 있습니다. 이는 sglang의 CI/CD 파이프라인을 확장하여 새로운 모델과 하드웨어 조합에 대한 자동화된 검증을 가능하게 하는 중요한 단계입니다.
1. CI 워크플로우 설정 변경 (.github/workflows/nightly-test-amd.yml, .github/workflows/nightly-test-amd-rocm720.yml)
PR은 기존 AMD GPU 테스트 워크플로우 파일 두 개를 수정하여 GLM-5.1 모델에 대한 새로운 벤치마크 작업을 추가했습니다.
nightly-test-amd.yml 변경 사항:
기존 nightly-test-amd.yml 파일은 AMD GPU 환경에서의 다양한 모델들에 대한 야간 테스트를 정의합니다. 이 PR은 job_filter 목록에 nightly-8-gpu-glm51 및 nightly-8-gpu-glm51-mxfp4를 추가하여, MI30x GPU에서 GLM-5.1 모델의 기본 FP8 및 MXFP4 버전에 대한 테스트를 활성화했습니다.
Before:
--- a/.github/workflows/nightly-test-amd.yml
+++ b/.github/workflows/nightly-test-amd.yml
@@ -44,6 +44,8 @@ on:
- nightly-8-gpu-qwen3-235b
- nightly-8-gpu-qwen35
- nightly-8-gpu-glm5
+ - nightly-8-gpu-glm51
+ - nightly-8-gpu-glm51-mxfp4
- nightly-8-gpu-minimax-m25
- nightly-1-gpu-zimage-turbo
- nightly-test-1-gpu-mi35x
@@ -61,6 +63,8 @@ on:
- nightly-8-gpu-mi35x-qwen3-235b-mxfp4
- nightly-8-gpu-mi35x-qwen35
- nightly-8-gpu-mi35x-glm5
+ - nightly-8-gpu-mi35x-glm51
+ - nightly-8-gpu-mi35x-glm51-mxfp4
- nightly-8-gpu-mi35x-minimax-m25
job_filter:
description: 'Or type comma-separated job names (overrides dropdown if non-empty)'
After:
--- a/.github/workflows/nightly-test-amd.yml
+++ b/.github/workflows/nightly-test-amd.yml
@@ -44,6 +44,8 @@ on:
- nightly-8-gpu-qwen3-235b
- nightly-8-gpu-qwen35
- nightly-8-gpu-glm5
+ - nightly-8-gpu-glm51
+ - nightly-8-gpu-glm51-mxfp4
- nightly-8-gpu-minimax-m25
- nightly-1-gpu-zimage-turbo
- nightly-test-1-gpu-mi35x
@@ -61,6 +63,8 @@ on:
- nightly-8-gpu-mi35x-qwen3-235b-mxfp4
- nightly-8-gpu-mi35x-qwen35
- nightly-8-gpu-mi35x-glm5
+ - nightly-8-gpu-mi35x-glm51
+ - nightly-8-gpu-mi35x-glm51-mxfp4
- nightly-8-gpu-mi35x-minimax-m25
job_filter:
description: 'Or type comma-separated job names (overrides dropdown if non-empty)'
또한, MI35x GPU에 대한 nightly-8-gpu-mi35x-glm51 및 nightly-8-gpu-mi35x-glm51-mxfp4 작업도 추가되었습니다.
nightly-test-amd-rocm720.yml 변경 사항:
ROCm 7.2 버전 환경에 대한 워크플로우도 유사하게 수정되었습니다. nightly-8-gpu-glm51-rocm720 및 nightly-8-gpu-mi35x-glm51-rocm720 작업이 추가되어, 최신 ROCm 버전에서도 GLM-5.1 모델의 벤치마크가 수행되도록 합니다. 특히, 기존의 nightly-8-gpu-mi35x-glm47-fp8-rocm720 작업이 제거되고 nightly-8-gpu-mi35x-glm51-rocm720으로 대체된 것은 GLM-5.1이 GLM-4.7-FP8을 대체하는 최신 모델임을 시사합니다.
Before:
--- a/.github/workflows/nightly-test-amd-rocm720.yml
+++ b/.github/workflows/nightly-test-amd-rocm720.yml
@@ -44,6 +44,7 @@ on:
- nightly-8-gpu-qwen3-235b-rocm720
- nightly-8-gpu-qwen35-rocm720
- nightly-8-gpu-glm5-rocm720
+ - nightly-8-gpu-glm51-rocm720
- nightly-8-gpu-minimax-m25-rocm720
- nightly-1-gpu-zimage-turbo-rocm720
- nightly-test-1-gpu-mi35x-rocm720
@@ -61,7 +62,7 @@ on:
- nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720
- nightly-8-gpu-mi35x-qwen35-rocm720
- nightly-8-gpu-mi35x-glm5-rocm720
- - nightly-8-gpu-mi35x-glm47-fp8-rocm720
+ - nightly-8-gpu-mi35x-glm51-rocm720
- nightly-8-gpu-mi35x-minimax-m25-rocm720
job_filter:
description: 'Or type comma-separated job names (overrides dropdown if non-empty)'
After:
--- a/.github/workflows/nightly-test-amd-rocm720.yml
+++ b/.github/workflows/nightly-test-amd-rocm720.yml
@@ -44,6 +44,7 @@ on:
- nightly-8-gpu-qwen3-235b-rocm720
- nightly-8-gpu-qwen35-rocm720
- nightly-8-gpu-glm5-rocm720
+ - nightly-8-gpu-glm51-rocm720
- nightly-8-gpu-minimax-m25-rocm720
- nightly-1-gpu-zimage-turbo-rocm720
- nightly-test-1-gpu-mi35x-rocm720
@@ -61,7 +62,7 @@ on:
- nightly-8-gpu-mi35x-qwen3-235b-mxfp4-rocm720
- nightly-8-gpu-mi35x-qwen35-rocm720
- nightly-8-gpu-mi35x-glm5-rocm720
- - nightly-8-gpu-mi35x-glm47-fp8-rocm720
+ - nightly-8-gpu-mi35x-glm51-rocm720
- nightly-8-gpu-mi35x-minimax-m25-rocm720
job_filter:
description: 'Or type comma-separated job names (overrides dropdown if non-empty)'
새로운 작업 정의:
이 PR은 nightly-test-amd.yml 및 nightly-test-amd-rocm720.yml 파일 내에 nightly-8-gpu-glm51 및 nightly-8-gpu-mi35x-glm51과 같은 새로운 작업을 구체적으로 정의합니다. 각 작업은 다음과 같은 단계를 포함합니다:
- Checkout code: 최신 코드를 가져옵니다.
- Setup docker: 테스트 환경을 위한 Docker 컨테이너를 설정합니다. ROCm 7.2 워크플로우에서는
--rocm-version rocm720옵션을 사용하여 특정 ROCm 버전을 명시합니다. - Install dependencies: 필요한 Python 패키지 및 라이브러리를 설치합니다. 특히,
transformers라이브러리의 특정 커밋(@96f807a33b75)을 설치하는 부분이 눈에 띕니다. 이는 해당 버전의transformers라이브러리가 GLM-5.1 모델 로딩 또는 처리에 필수적임을 나타냅니다. - Accuracy Test:
run_suite.py스크립트를 사용하여 정확도 테스트를 수행합니다.--suite옵션으로nightly-amd-accuracy-8-gpu-glm51또는nightly-amd-8-gpu-mi35x-glm51과 같이 모델 및 하드웨어에 맞는 테스트 스위트를 지정합니다.timeout-per-file옵션은 각 테스트 파일에 대한 최대 실행 시간을 설정합니다. - Performance Test:
bench_one_batch와 같은 성능 지표를 측정하기 위한 테스트를 수행합니다. 이 단계에서는continue-on-error: true가 설정되어 있어, 성능 테스트 실패가 전체 CI 작업을 중단시키지 않도록 합니다. 이는 정확도 테스트의 실패가 더 중요함을 의미합니다.
Example snippet for a new job definition:
# 8-GPU GLM-5.1 (Accuracy + Performance combined) ROCm 7.2
nightly-8-gpu-glm51-rocm720:
if: (github.repository == 'sgl-project/sglang' || github.event_name == 'pull_request') && (!(inputs.job_filter || inputs.job_select) || (inputs.job_filter || inputs.job_select) == 'all' || contains(format(',{0},', inputs.job_filter || inputs.job_select), ',nightly-8-gpu-glm51-rocm720,'))
runs-on: linux-mi325-8gpu-sglang
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
- name: Setup docker (ROCm 7.2)
run: |
touch github_summary.md
bash scripts/ci/amd/amd_ci_start_container.sh --rocm-version rocm720
env:
GITHUB_WORKSPACE: ${{ github.workspace }}
- name: Install dependencies
run: |
bash scripts/ci/amd/amd_ci_install_dependency.sh --skip-test-time-deps
bash scripts/ci/amd/amd_ci_exec.sh pip install git+https://github.com/huggingface/transformers.git@96f807a33b75
- name: Accuracy Test ROCm 7.2 (8-GPU GLM-5.1 NSA)
timeout-minutes: 120
run: |
> github_summary.md # Clear summary file
bash scripts/ci/amd/amd_ci_exec.sh -w /sglang-checkout/test \
-e GITHUB_STEP_SUMMARY="/sglang-checkout/github_summary.md" \
python3 run_suite.py --hw amd --suite nightly-amd-accuracy-8-gpu-glm51 --nightly --timeout-per-file 3600 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} || TEST_EXIT_CODE=$?
echo "$(<github_summary.md )" >> $GITHUB_STEP_SUMMARY || true
exit ${TEST_EXIT_CODE:-0}
- name: Performance Test ROCm 7.2 (8-GPU GLM-5.1)
timeout-minutes: 120
continue-on-error: true
run: |
> github_summary.md # Clear summary file
bash scripts/ci/amd/amd_ci_exec.sh -w /sglang-checkout/test \
-e SGLANG_USE_AITER=1 \
-e GITHUB_STEP_SUMMARY="/sglang-checkout/github_summary.md" \
python3 run_suite.py --hw amd --suite nightly-perf-8-gpu-glm51 --nightly --timeout-per-file 5400 ${{ inputs.continue_on_error && '--continue-on-error' || '' }} || TEST_EXIT_CODE=$?
echo "$(<github_summary.md )" >> $GITHUB_STEP_SUMMARY || true
exit ${TEST_EXIT_CODE:-0}
2. 새로운 테스트 파일 추가
이 PR은 GLM-5.1 모델에 대한 정확도 및 성능 벤치마크를 실행하기 위한 새로운 Python 테스트 파일을 test/registered/amd/accuracy/ 및 test/registered/amd/perf/ 디렉토리에 추가했습니다.
test/registered/amd/accuracy/mi30x/test_glm51_eval_amd.pytest/registered/amd/accuracy/mi35x/test_glm51_eval_mi35x.pytest/registered/amd/perf/mi30x/test_glm51_perf_amd.pytest/registered/amd/perf/mi35x/test_glm51_perf_mi35x.py
이 파일들은 run_suite.py 스크립트에 의해 실행되며, 각 파일은 특정 하드웨어(MI30x, MI35x)와 테스트 유형(accuracy, perf)에 맞는 테스트 케이스를 정의합니다. 예를 들어, test_glm51_eval_amd.py는 MI30x에서 GLM-5.1 모델의 정확도를 평가하는 테스트를 포함할 것입니다.
왜 이게 좋은가?
이 PR은 sglang 프로젝트의 안정성과 확장성을 높이는 데 여러 가지 중요한 기여를 합니다.
-
모델 및 하드웨어 지원 확장: GLM-5.1-FP8 모델과 AMD MI30x/MI35x GPU에 대한 공식적인 벤치마크 테스트를 추가함으로써, sglang이 이 새로운 조합을 지원함을 명확히 하고 사용자들에게 신뢰를 제공합니다. 이는 LLM 생태계에서 하드웨어 다양성을 지원하는 중요한 발걸음입니다.
-
자동화된 회귀 방지: CI 워크플로우에 새로운 테스트를 통합함으로써, 향후 코드 변경이 GLM-5.1 모델의 성능이나 정확도를 저하시키는 회귀(regression)를 자동으로 탐지할 수 있게 됩니다. 이는 모델 서빙 프레임워크에서 매우 중요합니다.
-
성능 및 정확도 모니터링: 야간 벤치마크는 주기적으로 실행되어 모델의 성능 및 정확도 추세를 모니터링하는 데 사용됩니다. 이를 통해 성능 저하 또는 정확도 감소를 조기에 발견하고 대응할 수 있습니다.
-
명확한 테스트 설정: PR 설명에 명시된 서버 설정(
Server config)은 GLM-5와 GLM-5.1 벤치마크 간의 차이점을 이해하는 데 도움을 줍니다. 예를 들어, TP(Tensor Parallelism) 및 EP(Expert Parallelism) 설정, KV 캐시 데이터 타입, 메모리 사용량 등은 모델 성능에 직접적인 영향을 미칩니다.MI30x MI35x --tp 8 8 --kv-cache-dtype fp8_e4m3 (perf) fp8_e4m3 (perf) --mem-fraction-static 0.85 (perf) / 0.80 (accuracy) 0.85 (perf) / 0.80 (accuracy) --model-loader-extra-config {"enable_multithread_load": true}{"enable_multithread_load": true, "num_threads": 8}Parsers --reasoning-parser=glm45 --tool-call-parser=glm47Same Env SGLANG_USE_AITER=1SGLANG_USE_AITER=1,SGLANG_ROCM_FUSED_DECODE_MLA=0,ROCM_QUICK_REDUCE_QUANTIZATION=INT4,SAFETENSORS_FAST_GPU=1이 설정들은 각 하드웨어와 테스트 목적(정확도 vs 성능)에 맞게 최적화되었습니다. 예를 들어, 성능 테스트에서는
fp8_e4m3KV 캐시를 사용하고, MI35x 환경에서는SGLANG_ROCM_FUSED_DECODE_MLA=0,ROCM_QUICK_REDUCE_QUANTIZATION=INT4,SAFETENSORS_FAST_GPU=1과 같은 환경 변수를 설정하여 특정 하드웨어 기능을 활용하거나 최적화하려는 시도를 볼 수 있습니다. -
리뷰를 통한 개선: 리뷰 과정에서
[1am9trash]가 제기한 질문, 즉 GLM-5.1이--ep-size 8을 사용하는 반면 GLM-5는 순수 TP로 실행되는 이유와 GLM-5 벤치마크도 이에 맞춰야 하는지에 대한 논의는 매우 중요합니다.[michaelzhang-ai]의 답변(updated.)은 이 PR이 단순히 테스트 추가를 넘어, 기존 벤치마크 설정의 일관성과 최적화 방안까지 고려했음을 보여줍니다. 이는 모델 아키텍처(MoE)의 특성을 고려한 설정 조정의 중요성을 강조합니다.
일반적인 교훈
이 PR은 LLM 서빙 프레임워크 개발 및 유지보수에 있어 다음과 같은 일반적인 교훈을 제공합니다:
- CI/CD는 필수: 새로운 모델, 하드웨어, 또는 라이브러리 버전을 지원할 때마다 CI/CD 파이프라인을 확장하고 관련 테스트를 추가하는 것은 안정적인 소프트웨어 개발의 기본입니다.
- 테스트 설정의 중요성: 모델의 성능과 정확도는 하드웨어, 라이브러리 버전, 그리고 프레임워크의 내부 설정(TP, EP, 캐시 타입 등)에 크게 좌우됩니다. 따라서 벤치마크 테스트 설정은 실제 사용 환경을 최대한 반영하거나, 성능/정확도 측면에서 의미 있는 비교가 가능하도록 신중하게 구성해야 합니다.
- 리뷰는 협업의 장: 코드 리뷰는 단순한 버그 찾기를 넘어, 설계 결정의 타당성을 검토하고 잠재적인 개선점을 발견하는 중요한 협업 과정입니다. 특히,
ep-size와tp설정에 대한 논의는 모델 특성에 맞는 최적화 전략을 탐색하는 좋은 예시입니다. - 문서화의 가치: PR 설명에 포함된 서버 설정 테이블과 같은 정보는 변경 사항의 맥락을 이해하는 데 매우 유용합니다. 이는 향후 유사한 작업을 수행하거나 기존 설정을 이해하는 데 큰 도움이 됩니다.
결론
이 PR은 sglang 프로젝트가 GLM-5.1-FP8 모델을 AMD GPU 환경에서 지원하기 위한 중요한 기술적 발걸음을 내딛었음을 보여줍니다. CI/CD 워크플로우의 확장, 새로운 테스트 케이스의 추가, 그리고 리뷰 과정에서의 심도 있는 논의를 통해, sglang은 LLM 서빙의 복잡한 환경에서 모델의 성능과 정확도를 보장하기 위한 노력을 지속하고 있습니다. 이러한 꾸준한 최적화와 검증 과정은 sglang이 고성능 LLM 서빙을 위한 신뢰할 수 있는 프레임워크로 자리매김하는 데 기여할 것입니다.
참고 자료
- https://huggingface.co/zai-org/GLM-5-FP8
- https://huggingface.co/zai-org/GLM-5.1-FP8
- https://github.com/sgl-project/sglang/blob/main/scripts/ci/amd/amd_ci_start_container.sh
- https://github.com/sgl-project/sglang/blob/main/scripts/ci/amd/amd_ci_install_dependency.sh
- https://github.com/huggingface/transformers
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [sglang] SGLang AMD 환경에서의 GLM-5-FP8 성능 벤치마크 도입 및 최적화
- 현재글 : [sglang] sglang, GLM-5.1-FP8 모델 성능 및 정확도 벤치마크 추가: AMD GPU 환경에서의 최적화 분석
- 다음글 [sglang] SGLang의 AMD GPU 성능 최적화: Aiter CK 커널을 활용한 LayerNorm 오버헤드 제거
댓글