0 / 0
영어 버전 문서로 돌아가기
ONNX 형식으로 변환된 모델 배포하기
마지막 업데이트 날짜: 2025년 1월 22일
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,, 사이킷러닝과 같은 모델을 하나의 프레임워크에서 학습한 다음 다른 환경에서 실행할 수 있도록 내보내는 방법을 제공하여 워크플로우를 간소화합니다. 서로 다른 딥 러닝 프레임워크 간의 장벽을 허물어 개발자가 단일 에코시스템에 종속되지 않고 다양한 라이브러리의 강점을 활용할 수 있도록 지원합니다.

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

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

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM

PyTorch 모델을 ONNX 형식으로 변환하기

이 프로세스에 따라 PyTorch 학습된 모델을 ONNX 형식으로 변환합니다:

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

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

  3. PyTorch 모델을 ONNX 형식으로 변환합니다 : PyTorch 모델을 ONNX 형식으로 변환합니다:

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

    b. 모델을 내보냅니다 : torch.onnx.export 함수를 사용하여 모델을 ONNX 형식으로 변환합니다.

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

TensorFlow 모델을 ONNX 형식으로 변환하기

이 프로세스에 따라 모델 TensorFlow ONNX 형식으로 변환하세요:

  1. 라이브러리 가져오기 : 먼저 tf2onnx 같은 필수 라이브러리를 가져와서 TensorFlow 모델을 ONNX로 쉽게 변환하고 애플리케이션에 필요한 기타 라이브러리를 가져옵니다.

  2. TensorFlow 모델을 다운로드합니다 : 외부에서 만든 TensorFlow 모델과 모델 학습에 사용되는 데이터를 다운로드해야 합니다.

  3. TensorFlow 모델을 ONNX 형식으로 변환하기 : tf2onnx.convert 명령을 사용하여 SavedModel 형식으로 생성된 TensorFlow 모델을 ONNX 형식으로 변환합니다. TensorFlow 라이트 모델을 변환하려면 --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 로드 : CatBoost pickle 와 같은 라이브러리를 사용하여 로드할 수 있습니다

    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'
        }
    )
    

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

LightGBM ONNX 형식으로 변환

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

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

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

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

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

    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, lgbm_model.num_feature()]))]
    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 라이브러리를 사용하여 모델이 예상대로 작동하는지 확인합니다.

추가 고려사항

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

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

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

  • 옵션 설정 버전 : ONNX의 옵셋 버전에 따라 모델에서 지원하는 작업 집합과 해당 사양이 결정됩니다. 이는 모델 변환 및 배포 시 중요한 요소입니다.

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

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 함께 사용하세요 ONNX 데이터 세트로 PyTorch 모델을 생성합니다.
PyTorch 모델을 ONNX 형식으로 변환
변환된 모델을 Watson Machine Learning 리포지토리에 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
TensorFlow 변환된 ONNX 모델을 사용하여 손으로 쓴 숫자를 인식하기 위해 watsonx 사용 ONNX 데이터 세트와 함께 외부에서 학습된 TensorFlow 모델을 다운로드하세요.
TensorFlow 모델을 ONNX 형식으로 변환
Watson Machine Learning 리포지토리에 변환된 모델을 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
ONNX 모델로 변환된 CatBoost ONNX CatBoost 모델 훈련.
CatBoost 모델을 ONNX 형식으로 변환합니다.
Watson Machine Learning 저장소에 변환된 모델을 유지합니다.
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델을 배포합니다.
클라이언트 라이브러리를 사용하여 샘플 레코드를 채점합니다.
ONNX 모델로 변환된 LightGBM ONNX LightGBM 모델 훈련
LightGBM 모델을 ONNX 형식으로 변환
변환된 모델을 watsonx.ai 런타임 저장소에 영구 저장
클라이언트 라이브러리를 사용하여 온라인 채점을 위한 모델 배포
클라이언트 라이브러리를 사용하여 샘플 기록 채점

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