정확도 평가

정확도 평가 (Accuracy Evaluation)

Ascend NPU 정확도 평가

Ascend NPU에서 실행되는 SGLang 모델의 정확도 평가를 EvalScope 도구로 수행하는 방법을 설명합니다. 다음 시나리오를 다룹니다:

  • 온라인 테스트: SGLang 서버 시작 후 API 인터페이스로 평가
  • 텍스트 모델: Qwen2.5-7B-Instruct 예시 사용
  • 멀티모달 모델: Qwen2.5-VL-7B-Instruct 예시 사용

출처: 문서

본문

환경 설정 (Environment Setup)

진행하기 전에 충분한 디스크 공간을 확보하세요. Docker 이미지는 최소 **30GB**의 여유 공간이 필요합니다. 모델 가중치를 다운로드해야 한다면 [ModelScope](https://www.modelscope.cn/models)에서 모델 크기를 확인해 충분한 공간을 확보하세요.

먼저 제공된 컨테이너 이미지로 SGLang 환경을 시작합니다:

```shell Command theme={null} export IMAGE=quay.io/ascend/sglang:cann9.0.0-a3-v0.5.16
docker run -it --rm --privileged --network=host --ipc=host --shm-size=16g \
    --device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 --device=/dev/davinci3 \
    --device=/dev/davinci4 --device=/dev/davinci5 --device=/dev/davinci6 --device=/dev/davinci7 \
    --device=/dev/davinci8 --device=/dev/davinci9 --device=/dev/davinci10 --device=/dev/davinci11 \
    --device=/dev/davinci12 --device=/dev/davinci13 --device=/dev/davinci14 --device=/dev/davinci15 \
    --device=/dev/davinci_manager \
    --device=/dev/hisi_hdc \
    --volume /usr/local/sbin:/usr/local/sbin \
    --volume /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    --volume /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
    --volume /etc/ascend_install.info:/etc/ascend_install.info \
    --volume /var/queue_schedule:/var/queue_schedule \
    --volume ~/.cache/:/root/.cache/ \
    --entrypoint=bash \
    $IMAGE
```
```shell Command theme={null} export IMAGE=quay.io/ascend/sglang:cann9.0.0-910b-v0.5.16
docker run -it --rm --privileged --network=host --ipc=host --shm-size=16g \
    --device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 --device=/dev/davinci3 \
    --device=/dev/davinci4 --device=/dev/davinci5 --device=/dev/davinci6 --device=/dev/davinci7 \
    --device=/dev/davinci_manager \
    --device=/dev/hisi_hdc \
    --volume /usr/local/sbin:/usr/local/sbin \
    --volume /usr/local/Ascend/driver:/usr/local/Ascend/driver \
    --volume /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
    --volume /etc/ascend_install.info:/etc/ascend_install.info \
    --volume /var/queue_schedule:/var/queue_schedule \
    --volume ~/.cache/:/root/.cache/ \
    --entrypoint=bash \
    $IMAGE
```

EvalScope 사용 (Using EvalScope)

EvalScope는 ModelScope의 포괄적 모델 평가 프레임워크로, 정확도 평가와 성능 스트레스 테스트를 모두 지원합니다.

EvalScope 설치

# Method 1: Installing via pip
pip install evalscope

# Method 2: Installing from source
git clone https://github.com/modelscope/evalscope.git
cd evalscope/
pip install -e .

온라인 텍스트 모델 테스트

이 섹션은 SGLang 서버가 이미 실행 중인 온라인 평가 시나리오를 다룹니다.

SGLang 서버 시작

# Set HuggingFace mirror (if network access is restricted)
export HF_ENDPOINT=https://hf-mirror.com

# Start text model server
sglang serve --model-path /home/weights/Qwen2.5-7B-Instruct --attention-backend ascend --host 0.0.0.0 --port 30000 &

SGLang 서버의 자세한 내용은 Ascend NPU 빠른 시작을 참조하세요.

정확도 평가 실행

EvalScope는 OpenAI 호환 API를 통해 SGLang 서버에 연결합니다. 다음 예시는 GSM8K 데이터셋을 사용합니다:

evalscope eval \
 --model /home/weights/Qwen2.5-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets gsm8k \
 --limit 10

완료되면 다음과 유사한 결과가 표시됩니다:

+---------------------+-----------+----------+----------+-------+---------+---------+
| Model               | Dataset   | Metric   | Subset   |   Num |   Score | Cat.0   |
+=====================+===========+==========+==========+=======+=========+=========+
| Qwen2.5-7B-Instruct | gsm8k     | mean_acc | main     |     5 |     1.0 | default |
+---------------------+-----------+----------+----------+-------+---------+---------+

참고: 출력 형식은 EvalScope 버전에 따라 약간 다를 수 있습니다. 위 예시는 EvalScope 1.6.x에서 온 것입니다. --model 파라미터가 SGLang 서버의 /v1/models 엔드포인트가 반환하는 모델 이름과 일치하는지 확인하세요. HF 경로(예: Qwen/Qwen2.5-7B-Instruct)로 서버를 시작할 때는 그 경로를 직접 사용하세요. 로컬 경로의 경우 전체 경로 또는 /v1/models가 반환하는 모델 이름을 전달하세요.

온라인 평가의 일반 데이터셋

# MMLU
evalscope eval \
 --model /home/weights/Qwen2.5-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets mmlu

# CEval (Chinese evaluation)
evalscope eval \
 --model /home/weights/Qwen2.5-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets ceval

# MATH-500
evalscope eval \
 --model /home/weights/Qwen2.5-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets math_500

# HumanEval (code generation)
evalscope eval \
 --model /home/weights/Qwen2.5-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets humaneval

온라인 멀티모달 모델 테스트

멀티모달 모델 서버 시작

# Start multimodal model server (Qwen2.5-VL-7B-Instruct)
# Multimodal models require both --attention-backend and --mm-attention-backend
sglang serve --model-path /home/weights/Qwen2.5-VL-7B-Instruct \
    --attention-backend ascend \
    --mm-attention-backend ascend_attn \
    --host 0.0.0.0 --port 30000 &

멀티모달 정확도 평가 실행

# MMBench (multimodal evaluation)
evalscope eval \
 --model /home/weights/Qwen2.5-VL-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets mm_bench

# MMMU (multimodal comprehensive understanding)
evalscope eval \
 --model /home/weights/Qwen2.5-VL-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets mmmu

# HallusionBench (hallucination evaluation)
evalscope eval \
 --model /home/weights/Qwen2.5-VL-7B-Instruct \
 --api-url http://localhost:30000/v1 \
 --api-key EMPTY \
 --eval-type openai_api \
 --datasets hallusion_bench

자세한 내용은 EvalScope 문서를 참조하세요.


문제 해결 (Troubleshooting)

SGLang 서버 시작 실패

  1. 디바이스 매핑 확인: A2 시리즈는 davinci[0-7], A3 시리즈는 davinci[0-15] 사용
  2. 이미지 태그가 디바이스 유형과 일치하는지 확인: A2 시리즈는 ...-910b, A3 시리즈는 ...-a3
  3. npu-smi info로 NPU 상태 확인
  4. 첫 실행은 모델 다운로드 필요. 네트워크 접근이 제한되면 HF_ENDPOINT=https://hf-mirror.com 설정

EvalScope의 서버 연결 실패

  1. SGLang 서버가 성공적으로 시작되었는지 확인(로그에서 Application startup complete 찾기)
  2. --api-url이 올바른 포트를 가리키는지 확인(SGLang 기본 30000)
  3. URL이 /v1로 끝나는지 확인. 예: http://localhost:30000/v1

EvalScope SSL 인증서 검증 실패

데이터셋이나 모델 경로를 지정하지 않고 EvalScope 명령을 사용하면 자동 다운로드를 시도하며 SSL 인증서 검증 오류가 발생할 수 있습니다:

  File "/usr/local/python3.11.14/lib/python3.11/site-packages/requests/sessions.py", line 605, in get
    return self.request("GET", url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/python3.11.14/lib/python3.11/site-packages/requests/sessions.py", line 592, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/python3.11.14/lib/python3.11/site-packages/requests/sessions.py", line 706, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/python3.11.14/lib/python3.11/site-packages/requests/adapters.py", line 676, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.modelscope.cn', port=443): Max retries exceeded with url: /api/v1/datasets/AI-ModelScope/gsm8k (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1016)')))
[ERROR] 2026-05-13-02:20:01 (PID:876, Device:-1, RankID:-1) ERR99999 UNKNOWN application exception

임시 해결책(테스트 전용): /usr/local/python3.11.14/lib/python3.11/site-packages/requests/sessions.py로 이동해 class Session 정의를 찾고 self.verify = False로 설정합니다.

이는 Python `requests` 라이브러리의 **TLS 인증서 검증을 전역적으로 비활성화**합니다. 격리된 테스트 환경에서 **진단용 임시 단계로만** 사용하세요. 프로덕션에서는 절대 사용하지 마세요.

안정적 해결책: 이 오류는 기업 TLS 프록시가 자체 서명 인증서를 주입해 발생합니다. requests가 프록시의 CA 번들을 가리키도록 하세요:

# Obtain the CA certificate from your network administrator
# Then set the environment variable:
export REQUESTS_CA_BUNDLE=/path/to/your-proxy-ca-bundle.crt
이는 기업 프록시 환경의 일반적인 해결책입니다. 문제가 해결되지 않으면 IT 부서에 문의하세요. 프록시 구성은 조직마다 다릅니다.

CA 인증서를 얻을 수 없다면 아래 데이터셋 다운로드 오류에서처럼 데이터셋을 수동으로 다운로드하세요.

EvalScope 요청 재시도 타임아웃

EvalScope가 다음과 같은 오류로 요청을 계속 재시도한다면:

2026-06-22 03:09:03 - evalscope - WARNING: Attempt 4 / 5 failed: ....... Retrying...
2026-06-22 03:09:14 - evalscope - INFO: Evaluating[ceval]   0%| 0/520 [Elapsed: 02:00 < Remaining: ?, ?it/s]
2026-06-22 03:09:19,557 - openai._base_client - INFO: Retrying request to /chat/completions in 0.447260 seconds
2026-06-22 03:09:26,088 - openai._base_client - INFO: Retrying request to /chat/completions in 0.992551 seconds

보통 HTTP 프록시가 로컬 SGLang 서버에 대한 요청을 가로채기 때문입니다. 프록시를 비활성화하세요:

unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY

데이터셋 다운로드 오류

이 오류의 경우

root@localhost:/home/# wget https://www.modelscope.cn/datasets/evalscope/MMStar/resolve/master/MMStar.tsv
--2026-05-12 12:08:01--  https://www.modelscope.cn/datasets/evalscope/MMStar/resolve/master/MMStar.tsv
Connecting to <PROXY_IP>:<PROXY_PORT>... connected.
ERROR: cannot verify www.modelscope.cn's certificate, issued by ‘<CERT_ISSUER>’:
  Self-signed certificate encountered.
To connect to www.modelscope.cn insecurely, use `--no-check-certificate`.

--no-check-certificate를 추가할 수 있습니다.

wget https://www.modelscope.cn/datasets/evalscope/MMStar/resolve/master/MMStar.tsv --no-check-certificate

추가 지원은 SGLang GitHub Issues를 참조하세요.

더 알아보기 (Learn more)