Python 함수를 작성한 다음 모델을 배포하는 데 사용할 수 있는 에셋으로 저장하는 방법을 알아보세요.
배치 가능 함수의 일반 요구사항 목록은 배치 가능한 기능에 대한 일반 요구사항을 참조하십시오. 함수 배치 중 발생하는 사항에 대한 정보는 함수 배치 프로세스 참조
배치 가능한 기능에 대한 일반 요구사항
성공적으로 배치하려면 함수가 다음 요구사항을 충족해야 합니다.
- 가져올 Python 함수 파일의 범위에
score
함수 오브젝트가 있어야 합니다. 점수 기능 요구사항 참조 - 스코어링 입력 페이로드는 스코어링 입력 요구사항 에 나열된 요구사항을 충족해야 합니다.
score
의 출력으로 예상되는 출력 페이로드에는 상태 코드 200에 대한score_response
변수의 스키마가 포함되어야 합니다. JSON 오브젝트의 배열을 값으로 사용하는prediction
매개변수는score
출력에서 필수입니다.- Python 클라이언트를 사용하여 외부 함수에 대한 참조를 포함하는 Python 함수를 저장하면 외부 함수(중첩 함수 포함)의 범위에 있는 코드만 저장됩니다. 따라서 외부 함수의 범위 밖의 코드는 저장되지 않으므로 함수를 배치할 때 사용할 수 없게 됩니다.
점수 기능 요구사항
score
함수 오브젝트를 추가하는 두 가지 방법이 있습니다.- 사용자가 명시적으로
- 암시적으로, Python 함수를 watsonx.ai 런타임 저장소에 에셋으로 저장하는 데 사용되는 방법을 통해
- '
score
' 함수는 단일 JSON 입력 매개변수 또는 페이로드와 무기명 토큰의 두 가지 매개변수를 사용할 수 있습니다. score
함수는 JSON-직렬화 가능 오브젝트(예: 사전 또는 목록)를 리턴해야 합니다.
스코어링 입력 요구사항
스코어링 입력 페이로드에는 이 예제 스키마에 표시된 대로 이름이
values
인 배열이 포함되어야 합니다.input_data
매개변수는 페이로드에서 필수입니다.input_data
매개변수에는 추가 이름-값 쌍도 포함될 수 있습니다.{"input_data": [{ "values": [["Hello world!"]] }] }
채점 입력 페이로드는 '
score
'의 입력 파라미터 값으로 전달되어야 합니다. 이러한 방식으로score
입력 매개변수의 값이score
내에서 적절하게 처리되는지 확인할 수 있습니다.스코어링 입력 페이로드는 관련 Python 함수의 입력 요구사항과 일치해야 합니다.
스코어링 입력 페이로드에는 예 입력 데이터 스키마와 일치하는 배열이 포함되어야 합니다.
예제 입력 데이터 스키마
{"input_data": [{
"values": [["Hello, world!"]]
}]
}
Python 코드 예시(페이로드 및 토큰)
#wml_python_function
def my_deployable_function():
def score(payload, token):
message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
response_message = "Received message - {0}".format(message_from_input_payload)
# Score using the pre-defined model
score_response = {
'predictions': [{'fields': ['Response_message_field'],
'values': [[response_message]]
}]
}
return score_response
return score
score = my_deployable_function()
Python 함수 테스트
Python 함수를 테스트하는 방법은 다음과 같습니다:
input_data = { "input_data": [{ "fields": [ "message" ],
"values": [[ "Hello, world!" ]]
}
]
}
function_result = score( input_data )
print( function_result )
"안녕하세요, 세상!"이라는 메시지를 반환합니다.
함수 배치 프로세스
함수 에셋의 Python 코드는 ' import
문을 사용하여 watsonx.ai 런타임 엔진에 의해 Python 모듈로 로드됩니다. 이는 코드가 정확히 한 번 실행됨을 의미합니다(기능이 배치될 때 또는 해당 팟이 다시 시작될 때마다). 함수 자산에 의해 정의되는 score
함수는 모든 예측 요청에서 호출됩니다.
배치 가능한 함수 처리
다음 방법 중 하나를 사용하여 배치 가능한 Python 함수를 작성하십시오.
시작하기 전에
API 키를 생성하여 작업 자격 증명을 설정해야 합니다. 자세한 내용은 작업 자격 증명 관리하기를 참조하세요.
REST API를 통해 배치 가능한 함수 작성
REST API의 경우 Python 함수가 파일을 통해 직접 업로드되므로 파일에는 이미 score
함수가 포함되어 있어야 합니다. score
함수에서 나중에 사용하기 위해 수행해야 하는 일회성 가져오기는 파일의 글로벌 범위 내에서 수행할 수 있습니다. 이 파일이 Python 함수로 배치되면 글로벌 범위에서 사용 가능한 일회성 가져오기가 배치 중에 실행되고 나중에 모든 예측 요청에 단순히 재사용됩니다.
기능 아카이브는 .gz
파일이어야 합니다.
샘플 score
함수 파일:
Score function.py
---------------------
def score(input_data):
return {'predictions': [{'values': [['Just a test']]}]}
한 번의 가져오기를 사용하는 샘플 score
함수:
import subprocess
subprocess.check_output('pip install gensim --user', shell=True)
import gensim
def score(input_data):
return {'predictions': [{'fields': ['gensim_version'], 'values': [[gensim.__version__]]}]}
Python 클라이언트를 통해 배치 가능한 기능 작성
Python 기능을 자산으로 지속하기 위해 Python 클라이언트는 wml_client.repository.store_function
메소드를 사용합니다. 두 가지 방법으로 Python 함수를 지속할 수 있습니다:
Python 함수를 포함하는 파일을 통해 함수 지속
이 메소드는 REST API를 통해 Python 함수 파일을 유지하는 것과 동일합니다(score
은(는) Python 소스 파일의 범위에서 정의해야 함). 자세한 내용은 REST API를 통해 배치 가능한 함수 작성을 참조하십시오.
wml_client.repository.store_function
메소드를 호출할 때 파일 이름을 첫 번째 인수로 전달하십시오.
함수 오브젝트를 통해 함수 지속
score
(이)라는 중첩된 함수로 Python 닫기를 작성하여 Python 함수 오브젝트를 지속할 수 있습니다. score
함수는 호출 시 함수 오브젝트로 저장되는 외부 함수에 의해 리턴됩니다. 이 score
함수는 배치 가능한 함수에 대한 일반 요구사항에 나열된 요구사항을 충족해야 합니다. 이 경우, 배치 중에 실행되고 score
함수 내에서 사용되도록 한 번의 가져오기 및 초기 설정 로직을 외부 중첩 함수에 추가해야 합니다. prediction
요청 중에 필요한 반복 로직은 중첩된 score
함수 내에 추가되어야 합니다.
샘플 Python 함수는 Python 클라이언트를 사용하여 저장됩니다.
def my_deployable_function():
import subprocess
subprocess.check_output('pip install gensim', shell=True)
import gensim
def score(input_data):
import
message_from_input_payload = payload.get("input_data")[0].get("values")[0][0]
response_message = "Received message - {0}".format(message_from_input_payload)
# Score using the pre-defined model
score_response = {
'predictions': [{'fields': ['Response_message_field', 'installed_lib_version'],
'values': [[response_message, gensim.__version__]]
}]
}
return score_response
return score
function_meta = {
client.repository.FunctionMetaNames.NAME:"test_function",
client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: sw_spec_id
}
func_details = client.repository.store_function(my_deployable_function, function_meta)
이 시나리오에서 Python 함수는 ' score
함수가 포함된 Python 파일을 생성하고 해당 함수 파일을 watsonx.ai 런타임 리포지토리에 자산으로 유지하는 작업을 수행합니다:
score = my_deployable_function()
자세히 알아보기
상위 주제: Python 함수 배치