Batch deployments
는 현재 외부 모델에 대해 지원되지 않습니다. 대신 외부 모델을 사용하는 Python 변환을 구성하세요.
Foundry는 Azure Machine Learning, Amazon SageMaker, OpenAI, Vertex AI 등의 제 3자 애플리케이션, 서비스 또는 모델 제공자에 호스팅된 모델을 대신하는 모델을 생성할 수 있게 해줍니다. 이로 인해 Foundry 외부에서 개발된 모델이 Foundry 사용자, 파이프라인, 운영 애플리케이션에서 사용할 수 있게 됩니다.
외부 호스팅된 모델이 통합되면 Foundry는 다음을 제공합니다:
외부 호스팅된 모델에 대한 연결을 만들려면 다음이 필요합니다:
아래의 단계를 따라 외부 호스팅된 모델을 대신하는 모델을 만들 수 있습니다.
첫 번째 단계는 새로운 모델을 생성하는 것입니다. 이는 Foundry 프로젝트에서 +New > Model을 선택하거나 새롭거나 기존의 Modelling Objective를 통해 수행할 수 있습니다. Modelling Objective에서는 Add model을 선택합니다.
아래의 스크린샷은 Foundry 프로젝트에서 +New > Model을 선택하여 새 모델을 생성하는 과정을 보여줍니다.
아래의 스크린샷은 Modelling Objective에서 Add model을 선택하여 새 모델을 생성하는 과정을 보여줍니다.
Connect an externally hosted model을 선택한 다음 Next를 선택합니다.
외부 호스팅된 모델에 대한 소스로 Custom connection을 선택하고 드롭다운에서 egress policy를 선택한 다음 Next를 선택합니다.
출구 정책은 Foundry 프로젝트 또는 아티팩트가 Foundry에서 외부 시스템으로 데이터를 전송하도록 합니다. 출구 정책은 귀하의 조직의 Foundry 보안 모델에 의해 제어될 수 있습니다. 필요한 권한이 있는 경우, Control Panel application에서 새로운 출구 정책을 검색하고 구성할 수 있습니다.
이 모델에 대한 모델 어댑터를 선택합니다. 모델 어댑터는 로드 시간에 ExternalModelContext
를 가져와 외부 호스팅된 모델에 대한 연결을 초기화하도록 구성되어야 합니다. 자세한 정보는 모델 어댑터 생성 방법에 대한 문서를 참조하고, 외부 모델에 대한 example model adapters를 검토하며, ExternalModelContext
의 API definition을 확인하세요.
사용자 정의 모델 연결에 대한 모델 연결 세부 정보를 정의합니다. 연결 구성에는 두 가지 구성 요소가 있습니다:
사용자 정의 모델 연결에 대한 자격 증명 구성을 정의한 다음 Next를 선택합니다.
이 모델에 대한 모델 저장 위치, 모델 이름 및 버전 노트를 입력합니다. 이는 모델의 Foundry 이름, 위치, 메타데이터를 정의합니다.
이 모델을 Modelling Objective에서 생성하는 경우, 모델을 생성하고 이 모델을 Modelling Objective에 제출하기 위해 Submit을 선택합니다. Modelling Objective에서는 모델로 이동하여 구성을 볼 수 있으며, 연결된 자격 증명을 선택적으로 업데이트할 수 있습니다.
이 모델을 Foundry 프로젝트에서 생성하는 경우, 이 모델을 저장하기 위해 Done을 선택합니다.
외부 호스팅된 모델은 사용자가 자격 증명을 업데이트하고, 연결 구성을 보고, 출구 정책 RID를 복사하여 사용자가 Python Transforms를 구성할 수 있게 합니다.
외부 호스팅된 모델을 테스트하고 운영화하는 몇 가지 방법이 있습니다. 다음을 수행할 수 있습니다:
Foundry에서 실시간 추론을 위한 실시간 배포 설정을 위한 지침을 따릅니다.
모델이 같은 Foundry 프로젝트의 Modelling Objective에 호스팅되는 경우, 출구 정책은 실시간 배포에 자동으로 추가됩니다. 그렇지 않은 경우, 호스팅 프로젝트에 출구 정책을 가져와야 합니다.
외부 호스팅된 모델은 현재 배치 배포 또는 Modelling Objective에서의 자동 모델 평가를 지원하지 않습니다.
외부 모델을 사용하는 Python 변환을 구성하려면, 해당 연결에 대해 수동으로 네트워크 Egress를 활성화해야 합니다.
다음으로, 모델 버전에서 필요한 출구 정책 이름을 찾아 Python 변환을 해당 모델 입력으로 구성할 수 있습니다.
이 예에서는 Python 변환 저장소에 다음의 의존성이 설정되어 있습니다. 모델 추론에 필요한 external-model-adapters
와 외부 시스템과 상호 작용하는 transforms-external-systems
에 대한 의존성을 추가합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11 12
requirements: build: - python 3.8.* # 파이썬 3.8 버전 필요 - setuptools # setuptools 필요 run: - python 3.8.* # 파이썬 3.8 버전 필요 - transforms {{ PYTHON_TRANSFORMS_VERSION }} # 파이썬 변환 라이브러리 버전 - transforms-expectations # 변환 예상치 라이브러리 - transforms-verbs # 변환 동사 라이브러리 - transforms-external-systems # 변환 외부 시스템 라이브러리 - external-model-adapters 1.0.0 # 외부 모델 어댑터 버전 1.0.0
이 간단한 예시는 외부 호스팅된 모델을 가져와 추론을 수행합니다. 계산 Function에 입력으로 추가된 필수 export_control
및 egress
정책에 주의하세요. egress 정책은 모델에서 정의한 것과 동일한 egress 정책을 사용해야 합니다.
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
from transforms.api import transform, Input, Output from palantir_models.transforms import ModelInput from transforms.external.systems import EgressPolicy, use_external_systems, ExportControl # 외부 시스템 사용 정책 설정 @use_external_systems( export_control=ExportControl(markings=['<MARKING_ID>']), # 수출 통제 정책 설정 egress=EgressPolicy('ri.resource-policy-manager.<RID>') # 출구 정책 설정 ) @transform( output=Output("/Foundry/Externally Hosted Models/data/inferences"), # 출력 경로 설정 model=ModelInput("/Foundry/Externally Hosted Models/models/Regression Model"), # 모델 경로 설정 foundry_input=Input("/Foundry/Externally Hosted Models/data/regression_features_input") # 입력 데이터 경로 설정 ) def compute( export_control, egress, output, model, foundry_input ): input_df = foundry_input.pandas() # 입력 데이터를 판다스 데이터프레임으로 변환 results = model.transform(input_df) # 모델에 데이터프레임 입력하여 결과 계산 output.write_pandas(results.df_out) # 결과 데이터프레임을 출력 경로에 저장
아래에는 외부 호스팅 모델과 함께 사용하기 위한 모델 어댑터의 예시 구조를 제공합니다.
추가 정보는 아래를 참조하는 것이 좋습니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
import palantir_models as pm import json import pandas as pd class ExampleModelAdapter(pm.ExternalModelAdapter): def __init__(self, url, credentials_map, configuration_map): # "연결 설정" 맵에서 모델 설정 추출 model_name = configuration_map['model_name'] model_parameter = configuration_map['model_parameter'] # "인증 정보 설정" 맵에서 모델 인증 정보 추출 secret_key = credentials_map['secret_key'] # 모델 로드 시점에서 http 클라이언트 초기화 self.client = ExampleClient(url, model_name, model_parameter, secret_key) @classmethod def init_external(cls, external_context: pm.ExternalContext) -> "pm.ExternalModelAdapter": return cls( url=external_context.base_url, credentials_map=external_context.resolved_credentials, configuration_map=external_context.external_model.connection_config, ) @classmethod def api(cls): inputs = {"df_in": pm.Pandas()} outputs = {"df_out": pm.Pandas()} return inputs, outputs def predict(self, df_in): payload = { "instances": df_in.apply(lambda row: {"features": row.tolist()}, axis=1).tolist() } # 클라이언트는 예시이며 외부 모델에 연결하려면 편집해야 함 response = self.client.predict( ContentType="application/json", Body=json.dumps(payload) ) result = response["Body"].read().decode() predictions = pd.DataFrame(json.loads(result)["predictions"]) return predictions