ONNX 형식으로 변환된 모델 배포하기

마지막 업데이트 날짜: 2025년 2월 21일
ONNX 형식으로 변환된 모델 배포하기

PyTorch 또는 TensorFlow 에서 다양한 형식으로 저장되어 Open Neural Network Exchange (ONNX) 형식으로 변환된 머신 러닝 모델을 배포하고 추론할 수 있습니다. ONNX 딥러닝 모델을 표현하기 위한 오픈 소스 형식입니다. 개발자들은 ONNX 형식을 사용하여 하나의 프레임워크( PyTorch 또는 TensorFlow 등)에서 모델을 훈련시킨 다음, 다른 성능 특성을 가진 다른 환경에서 실행되도록 내보낼 수 있습니다. ONNX 형식은 머신 러닝 모델을 ONNX 로 변환하고 ONNX 런타임을 사용하여 추론을 수행할 수 있는 강력한 솔루션을 제공합니다.

ONNX 런타임으로 모델을 변환하는 것의 이점

ONNX 런타임으로 모델을 변환하면 특히 머신러닝과 딥러닝 응용 프로그램의 맥락에서 여러 가지 이점을 얻을 수 있습니다. ONNX 런타임으로 모델을 변환할 때의 장점 중 일부는 다음과 같습니다

  • 크로스 플랫폼 호환성 : ONNX 은 머신 러닝 모델을 표현하는 표준 형식을 제공하므로, PyTorch 또는 Tensorflow 와 같은 다양한 프레임워크에 모델을 쉽게 배포할 수 있습니다. ONNX 런타임을 지원하는 다른 프레임워크에 배치할 수 있습니다.

  • 성능 향상 : 런타임 최적화( ONNX )는 그래프 최적화와 같은 다양한 하드웨어 및 소프트웨어별 최적화를 적용하여 추론에 적합한 모델을 최적화합니다. 또한 CPU, GPU 등 다양한 하드웨어에서의 실행을 지원하여 리소스를 효율적으로 활용할 수 있습니다.

  • 상호 운용성 : ONNX 은 PyTorch, TensorFlow,, scikit-learn과 같은 모델들을 하나의 프레임워크에서 훈련한 다음, 다른 환경에서 실행할 수 있도록 내보내는 방법을 제공하여 작업 흐름을 간소화합니다. 서로 다른 딥 러닝 프레임워크 간의 장벽을 허물어 개발자가 단일 에코시스템에 종속되지 않고 다양한 라이브러리의 강점을 활용할 수 있도록 지원합니다.

변환을 위해 지원되는 프레임워크

다음 프레임워크를 사용하는 머신 러닝 모델을 ONNX 형식으로 변환할 수 있습니다

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM
  5. XGBoost
  6. Scikit-learn

PyTorch 모델을 ONNX 형식으로 변환

PyTorch 에서 훈련된 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 모델 실행을 위한 onnxruntime, PyTorch 기능을 위한 torch 및 애플리케이션에 필요한 기타 라이브러리와 같은 필수 라이브러리를 가져오는 것으로 시작하세요.

  2. PyTorch 모델 생성 또는 다운로드 : PyTorch 모델을 생성할 때, 여러분 자신의 데이터 세트를 사용하거나 Hugging Face 와 같은 외부 오픈 소스 모델 저장소에서 제공하는 모델을 사용할 수 있습니다.

  3. PyTorch 모델을 ONNX 형식으로 변환 : PyTorch 모델을 ONNX 형식으로 변환하려면:

    a. 모델 준비 PyTorch : model.eval() 기능을 사용하여 평가 모드에 있는지 확인하십시오. 모델의 모양을 일치시키기 위해 더미 입력 텐서가 필요할 수 있습니다.

    b. 모델 내보내기: 모델 내보내기( torch.onnx.export ) 기능을 사용하여 모델을 ONNX 형식으로 변환합니다.

  4. 변환을 확인합니다 : 모델을 변환한 후 onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

TensorFlow 모델을 ONNX 형식으로 변환

TensorFlow 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 먼저, TensorFlow 모델을 ONNX로 변환하는 것을 용이하게 해주는 필수 라이브러리( tf2onnx 등)와 여러분의 어플리케이션에 필요한 다른 라이브러리를 가져오는 것으로 시작합니다.

  2. TensorFlow 모델 다운로드 : 외부에서 생성된 TensorFlow 모델과 모델 훈련에 사용되는 데이터를 다운로드해야 합니다.

  3. TensorFlow 모델을 ONNX 형식으로 변환 : tf2onnx.convert 명령을 사용하여 SavedModel 형식으로 생성된 TensorFlow 모델을 ONNX 형식으로 변환합니다. TensorFlow Lite 모델을 변환하려면 --saved-model 플래그 대신 --tflite 플래그를 사용하십시오.

참고:

Keras 모델과 함수( tf )는 Python 내에서 직접 변환할 수 있습니다. 이를 위해 tf2onnx.convert.from_keras 또는 tf2onnx.convert.from_function 함수를 사용합니다.

  1. 변환을 확인합니다 : 모델을 변환한 후 onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

CatBoost 모델을 ONNX 포맷으로 변환하기

CatBoost 에서 훈련된 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 다음과 같은 필수 라이브러리를 가져오는 것으로 시작합니다. onnxruntime 모델을 실행하기 위해 catboost ~을 위한 CatBoost 귀하의 애플리케이션에 필요한 기능 및 기타 라이브러리입니다.

  2. CatBoost 모델 생성 또는 다운로드 : CatBoost 모델을 생성할 때는 자체 데이터 세트를 사용하거나 Hugging Face 와 같은 외부 오픈 소스 모델 저장소에서 제공하는 모델을 사용할 수 있습니다.

  3. CatBoost 모델을 ONNX 형식으로 변환 : CatBoost 모델을 ONNX 형식으로 변환:

    a. CatBoost 모델 로드 : pickle 와 같은 라이브러리를 사용하여 CatBoost 모델을 로드할 수 있습니다

    catboost_model = pickle.load(file)
    

    b. 모델 내보내기 : 포맷 파라미터를 onnx 로 설정하고 catboost_model.save_model 기능을 사용하면 모델을 ONNX 포맷으로 변환할 수 있습니다.

    catboost_model.save_model(
        onnx_model_name,
        format="onnx",
        export_parameters={
            'onnx_domain': 'ai.catboost',
            'onnx_model_version': 1,
            'onnx_doc_string': 'test model for Regressor',
            'onnx_graph_name': 'CatBoostModel_for_Regression'
        }
    )
    
  4. 변환을 확인합니다 : 모델을 변환한 후 onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

LightGBM 모델을 ONNX 포맷으로 변환하기

LightGBM 에서 훈련된 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 다음과 같은 필수 라이브러리를 가져오는 것으로 시작합니다. onnxruntime 모델을 실행하기 위해 lightgbm ~을 위한 LightGBM 기능 및 onnxmltools 귀하의 애플리케이션에 필요한 변환 및 기타 라이브러리를 제공합니다.

  2. LightGBM 모델 생성 또는 다운로드 : LightGBM 모델을 생성할 때, 여러분 자신의 데이터 세트를 사용하거나 Hugging Face 와 같은 외부 오픈 소스 모델 저장소에서 제공하는 모델을 사용할 수 있습니다.

  3. LightGBM 모델을 ONNX 형식으로 변환 : LightGBM 모델을 ONNX 형식으로 변환:

    a. LightGBM 모델 로드 : pickle 와 같은 라이브러리를 사용하여 LightGBM 모델을 로드할 수 있습니다

    lgbm_model = pickle.load(file)
    

    b. 모델 내보내기: 모델 내보내기( convert_lightgbm ) 기능을 사용하여 모델을 ONNX 형식으로 변환합니다.

    from onnxmltools import convert_lightgbm
    from skl2onnx.common.data_types import FloatTensorType
    from onnxmltools.utils import save_model      
    
    initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))]
    onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types)
    onnx_model_filename = "lgbm_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
    팁:

    LightGBM 모델을 ONNX 형식으로 변환하는 데 문제가 있는 경우, watsonx.ai 런타임 문제 해결을 참조하십시오.

  4. 변환을 확인합니다 : 모델을 변환한 후 onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

XGBoost 모델을 ONNX 형식으로 변환

XGBoost 에서 훈련된 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 다음과 같은 필수 라이브러리를 가져오는 것으로 시작합니다. onnxruntime 모델을 실행하기 위해 xgboost ~을 위한 XGBoost 귀하의 애플리케이션에 필요한 기능 및 기타 라이브러리입니다.

  2. XGBoost 모델 생성 또는 다운로드 : XGBoost 모델을 생성할 때, 여러분 자신의 데이터 세트를 사용하거나 Hugging Face 와 같은 외부 오픈 소스 모델 저장소에서 제공하는 모델을 사용할 수 있습니다.

  3. XGBoost 모델을 ONNX 형식으로 변환 : XGBoost 모델을 ONNX 형식으로 변환하려면:

    a. XGboost 모델 로드 : pickle 와 같은 라이브러리를 사용하여 XGBoost 모델을 로드할 수 있습니다

    xgboost_model = pickle.load(file)
    

    b. 모델 내보내기: 모델 내보내기( convert_xgboost ) 기능을 사용하여 모델을 ONNX 형식으로 변환합니다.

    from onnxmltools import convert_xgboost
    from onnxconverter_common.data_types import FloatTensorType
    from onnxmltools.utils import save_model
    
    initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))]
    onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types)
    onnx_model_filename = "xgboost_onnx_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
  4. 변환 확인 : 모델을 변환한 후, onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

scikit-learn 모델을 ONNX 형식으로 변환

scikit-learn 에서 훈련된 모델을 ONNX 형식으로 변환하려면 다음 과정을 따르십시오

  1. 라이브러리 가져오기 : 다음과 같은 필수 라이브러리를 가져오는 것으로 시작합니다. onnxruntime 모델을 실행하기 위해 sklearn ~을 위한 scikit-learn 기능, skl2onnx 귀하의 애플리케이션에 필요한 변환 및 기타 라이브러리를 제공합니다.

  2. scikit-learn 모델 생성 또는 다운로드 : scikit-learn 모델을 생성할 때, 여러분 자신의 데이터 세트를 사용하거나 Hugging Face 와 같은 외부 오픈 소스 모델 저장소에서 제공하는 모델을 사용할 수 있습니다.

  3. scikit-learn 모델을 ONNX 형식으로 변환 : scikit-learn 모델을 ONNX 형식으로 변환:

    a. scikit-learn 모델 로드 : pickle 와 같은 라이브러리를 사용하여 scikit-learn 모델을 로드할 수 있습니다

    sklearn_model = pickle.load(file)
    

    b. 모델 내보내기: 모델 내보내기( to_onnx ) 기능을 사용하여 모델을 ONNX 형식으로 변환합니다.

    from skl2onnx import to_onnx
    onnx_model = to_onnx(sklearn_model, X, target_opset=19)
    
    with open("sklearn_model.onnx", "wb") as f:
       f.write(onnx_model.SerializeToString())
    
  4. 변환을 확인합니다 : 모델을 변환한 후 onnx 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

추가 고려사항

모델을 ONNX 형식으로 변환하는 데 있어 추가로 고려해야 할 사항이 몇 가지 있습니다

  • 동적 축 : 동적 축은 모델에서 동적 배치 크기 또는 시퀀스 길이와 같은 가변 입력 모양을 처리하는 데 사용할 수 있으며, 입력 크기가 다를 수 있는 애플리케이션에 배포된 모델에 유용합니다. 모델에서 동적 배치 크기 또는 시퀀스 길이와 같은 가변 입력 크기를 처리하는 경우 동적 축을 사용합니다.

    또한 동적 축은 여러 입력 및 출력과 함께 사용하여 모델을 다시 내보내지 않고도 동적으로 조정할 수 있으므로 메모리 오버헤드를 줄일 수 있습니다. PyTorch 또는 TensorFlow 에서 모델 내보내기 도중 동적 축을 지정할 수 있습니다.

  • 옵셋 버전 : ONNX 의 옵셋 버전은 모델이 지원하는 작업 세트와 그 사양을 결정합니다. 이는 모델 변환 및 배포 시 중요한 요소입니다.

    ONNX 의 다른 런타임과 프레임워크는 특정 운영 체제 버전을 지원합니다. 이전 운영 체제 버전에는 최신 버전에 있는 기능이나 최적화가 부족할 수 있습니다. 모델의 opset 버전과 ONNX 런타임의 비호환성으로 인해 추론 과정에서 오류가 발생할 수 있습니다. ONNX 의 opset 버전이 대상 런타임에서 지원되는지 확인해야 합니다.

ONNX 형식으로 변환된 모델 배포

onnxruntime_opset_19 소프트웨어 사양을 사용하여 ONNX 형식으로 변환된 기계 학습 모델을 배포하십시오. watsonx.ai 런타임 저장소에 모델을 저장할 때 소프트웨어 사양과 모델 유형을 지정해야 합니다. 자세한 내용은 지원되는 소프트웨어 사양을 참조하십시오.

ONNX 형식으로 변환된 모델을 사용자 인터페이스에 적용하려면 다음 단계를 따르십시오

  1. 배포 공간에서 자산 탭으로 이동합니다.

  2. 에셋 목록에서 모델을 찾고 메뉴 아이콘 메뉴 아이콘을 클릭한 다음 배포를 선택합니다.

  3. 모델의 배포 유형을 선택합니다. 온라인일괄 배포 옵션 중에서 선택합니다.

  4. 배포 이름을 입력하고 선택적으로 서비스 이름, 설명 및 태그를 입력합니다.

    참고:
    • 서빙 이름 필드를 사용하여 배포 ID 대신 배포 이름을 지정합니다.
    • 서빙 이름은 네임스페이스 내에서 고유해야 합니다.
    • 서빙 이름에는 다음 문자만 포함되어야 합니다: a-z,0-9,_]로만 구성되어야 하며 최대 36자이어야 합니다.
    • 사용자 정의 작업 흐름( foundation model )이 주기적으로 사용되는 작업 흐름의 경우, 배포할 때마다 동일한 서빙 이름을 모델에 할당하는 것을 고려해 보십시오. 이렇게 하면 모델을 삭제했다가 다시 배포한 후에도 코드에서 동일한 엔드포인트를 계속 사용할 수 있습니다.

  5. 모델의 하드웨어 사양을 선택합니다.

  6. 모델에 맞는 구성 및 소프트웨어 사양을 선택합니다.

  7. 작성을 클릭하십시오.

모델 테스트

배포된 모델을 ONNX 형식으로 변환하여 테스트하려면 다음 단계를 따르세요:

  1. 배포 공간에서 배포 탭을 열고 배포 이름을 클릭합니다.
  2. 테스트 탭을 클릭하여 프롬프트 텍스트를 입력하고 배포된 에셋에서 응답을 받습니다.
  3. 배포한 에셋 유형에 따라 다음 형식 중 하나로 테스트 데이터를 입력합니다:
    • 텍스트 : 텍스트 입력 데이터를 입력하여 텍스트 블록을 출력으로 생성합니다.
    • JSON : JSON 형식의 출력을 생성하려면 JSON 입력 데이터를 입력합니다.
  4. 생성을 클릭하여 프롬프트에 기반한 결과를 얻습니다.

샘플 노트북

다음 샘플 노트북은 Python 클라이언트 라이브러리를 사용하여 PyTorch 또는 TensorFlow 에서 ONNX 형식으로 변환된 머신 러닝 모델을 배포하는 방법을 보여줍니다

샘플 노트북
노트북 프레임워크 설명
ONNX 신경망을 고정 축에서 동적 축으로 변환하여 watsonx 함께 사용하세요 ONNX 환경 설정
기본 ONNX 모델 생성 및 내보내기
고정 축에서 동적 축으로 모델 변환
변환된 ONNX 모델 유지
ONNX 모델 배포 및 점수화
정리
요약 및 다음 단계
PyTorch 변환된 ONNX 모델을 watsonx 함께 사용하세요 PyTorch, ONNX 데이터 세트로 PyTorch 모델을 생성합니다.
PyTorch 모델을 ONNX 형식으로 변환
변환된 모델을 Watson Machine Learning 리포지토리에 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
TensorFlow 변환된 ONNX 모델을 사용하여 손으로 쓴 숫자를 인식하기 위해 watsonx 사용 Tensorflow, ONNX 데이터 세트와 함께 외부에서 학습된 TensorFlow 모델을 다운로드하세요.
TensorFlow 모델을 ONNX 형식으로 변환
Watson Machine Learning 리포지토리에 변환된 모델을 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
ONNX 모델로 변환된 CatBoost CatBoost, ONNX CatBoost 모델 훈련.
CatBoost 모델을 ONNX 형식으로 변환합니다.
Watson Machine Learning 저장소에 변환된 모델을 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
ONNX 모델로 변환된 LightGBM LightGBM, ONNX LightGBM 모델 훈련
LightGBM 모델을 ONNX 형식으로 변환
변환된 모델을 watsonx.ai 런타임 저장소에 영구 저장
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델 배포
클라이언트 라이브러리를 사용하여 샘플 기록 채점
Ibm- watsonx -ai를 사용하여 XGBoost에서 변환된 ONNX 모델 사용 XGBoost, ONNX XGBoost 모델을 훈련합니다.
XGBoost 모델을 ONNX 형식으로 변환합니다.
watsonx.ai 저장소에 변환된 모델을 유지합니다.
APIClient 인스턴스를 사용하여 온라인 채점용 모델을 배포합니다.
APIClient 인스턴스를 사용하여 샘플 레코드를 채점합니다.
Ibm- watsonx -ai를 사용하여 scikit-learn에서 변환된 ONNX 모델 사용 Scikit-learn, ONNX Scikit-learn 모델 훈련
기본 scikit-learn 모델을 ONNX 형식으로 변환
sklearn 파이프라인에 래핑된 사용자 정의 scikit-learn 모델의 변환 수행
변환된 모델을 watsonx.ai 런타임 저장소에 영구 저장
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델 배포
클라이언트 라이브러리를 사용하여 샘플 기록 채점

상위 주제: 머신 러닝 자산 배포