Phi-3 모델 실행 튜토리얼

Phi-3 모델 실행 튜토리얼

"작지만 강력하다"는 말을 그대로 보여주는 Phi-3 계열 모델을 ONNX Runtime의 generate() API로 실행해 볼게요. Phi-3와 Phi-3.5의 ONNX 모델은 HuggingFace에 올라와 있어서, API만 설치하면 바로 다운로드해서 돌릴 수 있어요. 지금은 mini(3.3B)와 medium(14B) 두 버전을 지원하는데, 둘 다 짧은 컨텍스트(4k) 버전과 긴 컨텍스트(128k) 버전으로 나뉘어요. 긴 컨텍스트 버전은 훨씬 긴 프롬프트를 받고 긴 출력을 만들 수 있지만, 그만큼 메모리를 더 먹는답니다.

출처: Run Phi-3 language models with the ONNX Runtime generate() API (공식 문서)

사용할 수 있는 모델

이 튜토리얼에서는 4k 컨텍스트의 mini(3B) 모델을 다운로드해 실행하는 흐름을 보여줘요. 나머지 버전의 다운로드 명령은 아래 모델 참조 섹션에서 확인할 수 있어요.

준비

  1. git 대용량 파일(LFS) 확장 설치

    HuggingFace는 버전 관리를 위해 git을 쓰기 때문에, ONNX 모델을 내려받으려면 git lfs를 설치해야 해요.

    • Windows: winget install -e --id GitHub.GitLFS (winget이 없으면 공식 소스에서 exe 다운로드)
    • Linux: apt-get install git-lfs
    • MacOS: brew install git-lfs

    그 다음 git lfs install을 실행해요.

  2. HuggingFace CLI 설치

    pip install huggingface-hub[cli]
    

플랫폼 고르기

Windows GPU 머신인가요?

  • 잘 모르겠다 → 이 가이드로 GPU가 있는지 확인하고, GPU가 DirectML 지원인지도 확인해요.
  • 예 → DirectML 지침을 따라요.
  • 아니오 → NVIDIA GPU가 있나요?
    • 잘 모르겠다 → 이 가이드로 CUDA 지원 GPU인지 확인해요.
    • 예 → NVIDIA CUDA 지침을 따라요.
    • 아니오 → CPU 지침을 따라요.

참고: 하드웨어에 따라 패키지와 모델이 하나만 필요해요. 즉 아래 섹션 중 하나만 진행하면 돼요.

DirectML로 실행하기

  1. 모델 다운로드

    huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include directml/* --local-dir .
    

    이 명령은 directml이라는 폴더에 모델을 내려받아요.

  2. generate() API 설치

    pip install --pre onnxruntime-genai-directml
    

    설치 후 pip listonnxruntime-genai-directml이 보일 거예요.

  3. 모델 실행

    phi3-qa.py로 모델을 실행해요.

    curl https://raw.githubusercontent.com/microsoft/onnxruntime-genai/main/examples/python/phi3-qa.py -o phi3-qa.py
    python phi3-qa.py -m directml\directml-int4-awq-block-128 -e dml
    

    스크립트가 모델을 불러오면 루프에서 입력을 받고, 모델이 만들 때마다 출력을 스트리밍해요. 예를 들면:

    Input: Tell me a joke about GPUs
    
    Certainly! Here's a light-hearted joke about GPUs:
    
    Why did the GPU go to school? Because it wanted to improve its "processing power"!
    

NVIDIA CUDA로 실행하기

  1. 모델 다운로드

    huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cuda/cuda-int4-rtn-block-32/* --local-dir .
    

    cuda 폴더에 모델이 내려와요.

  2. generate() API 설치

    pip install --pre onnxruntime-genai-cuda
    
  3. 모델 실행

    curl https://raw.githubusercontent.com/microsoft/onnxruntime-genai/main/examples/python/phi3-qa.py -o phi3-qa.py
    python phi3-qa.py -m cuda/cuda-int4-rtn-block-32  -e cuda
    

    예:

    Input: Tell me a joke about creative writing
    
    Output:  Why don't writers ever get lost? Because they always follow the plot!
    

CPU에서 실행하기

  1. 모델 다운로드

    huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir .
    

    cpu_and_mobile 폴더에 내려와요.

  2. CPU용 generate() API 설치

    pip install --pre onnxruntime-genai
    
  3. 모델 실행

    curl https://raw.githubusercontent.com/microsoft/onnxruntime-genai/main/examples/python/phi3-qa.py -o phi3-qa.py
    python phi3-qa.py -m cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4 -e cpu
    

    예:

    Input: Tell me a joke about generative AI
    
    Output:  Why did the generative AI go to school? To improve its "creativity" algorithm!
    

Phi-3 ONNX 모델 참조

Phi-3 mini 4k 컨텍스트 CPU

huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir .
python phi3-qa.py -m cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4 -e cpu

Phi-3 mini 4k 컨텍스트 CUDA

huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cuda/cuda-int4-rtn-block-32/* --local-dir .
python phi3-qa.py -m cuda/cuda-int4-rtn-block-32 -e cuda

Phi-3 mini 4k 컨텍스트 DirectML

huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include directml/* --local-dir .
python phi3-qa.py -m directml\directml-int4-awq-block-128 -e dml

Phi-3 mini 128k 컨텍스트 CPU

huggingface-cli download microsoft/Phi-3-mini-128k-instruct-onnx --include cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/* --local-dir .
python phi3-qa.py -m cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4 -e cpu

Phi-3 mini 128k 컨텍스트 CUDA

huggingface-cli download microsoft/Phi-3-mini-128k-instruct-onnx --include cuda/cuda-int4-rtn-block-32/* --local-dir .
python phi3-qa.py -m cuda/cuda-int4-rtn-block-32 -e cuda

Phi-3 mini 128k 컨텍스트 DirectML

huggingface-cli download microsoft/Phi-3-mini-128k-instruct-onnx --include directml/* --local-dir .
python phi3-qa.py -m directml\directml-int4-awq-block-128 -e dml

Phi-3 medium 4k 컨텍스트 CPU

git clone https://huggingface.co/microsoft/Phi-3-medium-4k-instruct-onnx-cpu
python phi3-qa.py -m Phi-3-medium-4k-instruct-onnx-cpu/cpu-int4-rtn-block-32-acc-level-4 -e cpu

Phi-3 medium 4k 컨텍스트 CUDA

git clone https://huggingface.co/microsoft/Phi-3-medium-4k-instruct-onnx-cuda
python phi3-qa.py -m Phi-3-medium-4k-instruct-onnx-cuda/cuda-int4-rtn-block-32 -e cuda

Phi-3 medium 4k 컨텍스트 DirectML

git clone https://huggingface.co/microsoft/Phi-3-medium-4k-instruct-onnx-directml
python phi3-qa.py -m Phi-3-medium-4k-instruct-onnx-directml/directml-int4-awq-block-128 -e dml

Phi-3 medium 128k 컨텍스트 CPU

git clone https://huggingface.co/microsoft/Phi-3-medium-128k-instruct-onnx-cpu
python phi3-qa.py -m Phi-3-medium-128k-instruct-onnx-cpu/cpu-int4-rtn-block-32-acc-level-4 -e cpu

Phi-3 medium 128k 컨텍스트 CUDA

git clone https://huggingface.co/microsoft/Phi-3-medium-128k-instruct-onnx-cuda
python phi3-qa.py -m Phi-3-medium-128k-instruct-onnx-cuda/cuda-int4-rtn-block-32 -e cuda

Phi-3 medium 128k 컨텍스트 DirectML

git clone https://huggingface.co/microsoft/Phi-3-medium-128k-instruct-onnx-directml
python phi3-qa.py -m Phi-3-medium-128k-instruct-onnx-directml/directml-int4-awq-block-128 -e dml

Phi-3.5 mini 128k 컨텍스트 CUDA

huggingface-cli download microsoft/Phi-3.5-mini-instruct-onnx --include cuda/cuda-int4-awq-block-128/* --local-dir .
python phi3-qa.py -m cuda/cuda-int4-awq-block-128 -e cuda

Phi-3.5 mini 128k 컨텍스트 CPU

huggingface-cli download microsoft/Phi-3.5-mini-instruct-onnx --include cpu_and_mobile/cpu-int4-awq-block-128-acc-level-4/* --local-dir .
python phi3-qa.py -m cpu_and_mobile/cpu-int4-awq-block-128-acc-level-4 -e cpu

더 알아보기