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 (공식 문서)
사용할 수 있는 모델
- microsoft/Phi-3-mini-4k-instruct-onnx
- microsoft/Phi-3-mini-128k-instruct-onnx
- microsoft/Phi-3-medium-4k-instruct-onnx-cpu,
-cuda,-directml - microsoft/Phi-3-medium-128k-instruct-onnx-cpu,
-cuda,-directml - microsoft/Phi-3.5-mini-instruct-onnx
이 튜토리얼에서는 4k 컨텍스트의 mini(3B) 모델을 다운로드해 실행하는 흐름을 보여줘요. 나머지 버전의 다운로드 명령은 아래 모델 참조 섹션에서 확인할 수 있어요.
준비
-
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을 실행해요. - Windows:
-
HuggingFace CLI 설치
pip install huggingface-hub[cli]
플랫폼 고르기
Windows GPU 머신인가요?
- 잘 모르겠다 → 이 가이드로 GPU가 있는지 확인하고, GPU가 DirectML 지원인지도 확인해요.
- 예 → DirectML 지침을 따라요.
- 아니오 → NVIDIA GPU가 있나요?
- 잘 모르겠다 → 이 가이드로 CUDA 지원 GPU인지 확인해요.
- 예 → NVIDIA CUDA 지침을 따라요.
- 아니오 → CPU 지침을 따라요.
참고: 하드웨어에 따라 패키지와 모델이 하나만 필요해요. 즉 아래 섹션 중 하나만 진행하면 돼요.
DirectML로 실행하기
-
모델 다운로드
huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include directml/* --local-dir .이 명령은
directml이라는 폴더에 모델을 내려받아요. -
generate() API 설치
pip install --pre onnxruntime-genai-directml설치 후
pip list에onnxruntime-genai-directml이 보일 거예요. -
모델 실행
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로 실행하기
-
모델 다운로드
huggingface-cli download microsoft/Phi-3-mini-4k-instruct-onnx --include cuda/cuda-int4-rtn-block-32/* --local-dir .cuda폴더에 모델이 내려와요. -
generate() API 설치
pip install --pre onnxruntime-genai-cuda -
모델 실행
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에서 실행하기
-
모델 다운로드
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폴더에 내려와요. -
CPU용 generate() API 설치
pip install --pre onnxruntime-genai -
모델 실행
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