watsonx.ai 사용하여 추론을 위한 사용자 지정 foundation model 배포하려면 모델을 클라우드 오브젝트 스토리지에 업로드해야 합니다. 배포 공간 또는 외부 클라우드 스토리지와 연결된 IBM Cloud Object Storage 버킷을 사용할 수 있습니다.
공용 리포지토리에서 모델 다운로드
공개 모델 저장소를 사용하여 파운데이션 모델을 다운로드할 수 있습니다. 공개 모델 저장소에서는 모델을 다운로드하기 전에 계정을 설정해야 할 수 있습니다.
예를 들어 공개 모델 저장소인 Hugging Face 사용하여 사용 사례에 맞는 사용자 지정 파운데이션 모델을 다운로드할 수 있습니다. ' Hugging Face'에서 모델을 다운로드하려면 ' Hugging Face 계정 '을 설정해야 합니다.
모델 다운로드
이 단계에서는 Hugging Face 모델을 사용하여 사용자 지정 foundation model 다운로드하는 방법을 설명합니다. 다음 단계에 따라 Hugging Face 명령줄 인터페이스를 사용하여 사용자 지정 foundation model 다운로드할 수 있습니다:
huggingface-cli
패키지를pip
와 함께 설치합니다:pip install -U "huggingface_hub[cli]"
허깅페이스-cli가 올바르게 설정되었는지 확인합니다:
huggingface-cli --help
필요한 환경 변수를 구성합니다:
export HF_TOKEN="<your Hugging Face token>" export MODEL_NAME="<name of the model>" export MODEL_DIR="<directory to download the model to>"
로컬 디스크에 모델을 다운로드할 디렉터리를 설정합니다:
mkdir ${MODEL_DIR}
Hugging Face 명령줄 인터페이스에 로그인하여 모델을 다운로드합니다:
huggingface-cli login --token ${HF_TOKEN} huggingface-cli download ${MODEL_NAME} --local-dir ${MODEL_DIR} --cache-dir ${MODEL_DIR}
모델을 필요한 형식으로 변환하기
객체 저장소에 모델을 추가하기 전에 모델이 텍스트 생성 추론(TGI) 표준과 호환되고 지원되는 모델 아키텍처 및 모델 유형으로 구축되었는지 확인해야 합니다. 자세한 내용은 사용자 지정 foundation model 배포 계획을 참조하세요.
모델이 InstructLab,으로 미세 조정된 경우 safetensors
형식으로 변환이 불가능할 수 있습니다:
- Linux 환경에서 미세 조정된 모델은 변환이 필요합니다.
- Mac에서 미세 조정된 모델은 변환할 수 없습니다.
- 미세 조정되어
.gguf
형식으로 저장된 모델은 (어떤 환경에서도) 변환할 수 없습니다.
InstructLab,으로 미세 조정된 모델을 변환하려면 이 리포지토리의 코드를 사용하여 모델을 변환합니다.
다른 모든 모델의 경우 모델이 safetensors
형식이 아니고 tokenizer.json
파일이 포함되어 있지 않은 경우 다음 단계에 따라 모델을 필요한 형식으로 변환합니다. 그렇지 않으면 클라우드 오브젝트 스토리지 설정 및 모델 추가 섹션으로 건너뛰세요.
로컬 컴퓨터에
podman
데스크톱를 설치합니다.TGIS 이미지를 가져옵니다:
export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74" podman pull ${TGIS_IMAGE}
모델을 변환합니다:
container_id=$(podman run -itd --privileged -u 0 -v ${MODEL_DIR}:/tmp ${TGIS_IMAGE} tail -f /dev/null) podman exec -it ${container_id} bash -c 'export MODEL_PATH=/tmp ; text-generation-server convert-to-safetensors ${MODEL_PATH} ; text-generation-server convert-to-fast-tokenizer ${MODEL_PATH}'
클라우드 오브젝트 스토리지에 모델 업로드
모델을 IBM Cloud Object Storage 버킷이나Amazon S3 Amazon Simple Storage Service )와 같은 다른 스토리지 버킷에 업로드할 수 있습니다. 다음은 IBM 제공하는 클라우드 개체 스토리지 중 일부입니다:
IBM Aspera Transfer SDK를 사용하여 모델을 IBM Cloud Object Storage에 업로드합니다
전제조건:
- IBM Aspera Transfer SDK를 다운로드하세요. 이 링크를 클릭합니다.
- 이러한 환경 변수를 설정합니다:
- IBM Aspera Transfer SDK의 경로를
path-to-aspera
로 지정합니다 - 모델이 있는 폴더의 경로를
path-to-model-folder
로 지정합니다 - 모델을 전송할 버킷 이름은
bucket-name
로 지정합니다 - 클라우드 오브젝트 스토리지 API 키는
api-key
입니다 - 클라우드 오브젝트 스토리지 서비스 인스턴스 ID는
cos-service-instance-id
입니다 - 클라우드 오브젝트 스토리지 서비스 엔드포인트를
cos-service-endpoint
로 설정합니다
- IBM Aspera Transfer SDK의 경로를
이 스크립트를 사용하여 IBM Cloud Object Storage에 모델을 업로드하려면 IBM Aspera Transfer SDK를 사용하세요:
import grpc
import sys
import time, subprocess
import json
import os.path
import os.environ
import transfer_pb2 as transfer_manager
import transfer_pb2_grpc as transfer_manager_grpc
path_to_aspera = os.environ['path-to-aspera']
sys.path.append(f'{path_to_aspera}/connectors/python')
def start_aspera_daemon():
config_path = f'/{path_to_aspera}/config/asperatransferd.json'
daemon_path = f'/{path_to_aspera}/bin/asperatransferd'
# Start the daemon
process = subprocess.Popen([daemon_path, '--config', config_path])
print(f"Started Aspera Transfer SDK daemon with PID {process.pid}")
time.sleep(5) # Increased wait time for the daemon to start properly
return process
def run():
try:
# create a connection to the transfer manager daemon
client = transfer_manager_grpc.TransferServiceStub(grpc.insecure_channel('localhost:55002'))
# create transfer spec
transfer_spec = {
"session_initiation":{
"icos":{
"bucket": os.environ['bucket-name'],
"api_key": os.environ['cos-api-key'],
"ibm_service_instance_id": os.environ['cos-service-instance-id'],
"ibm_service_endpoint": os.environ['cos-service-endpoint'] # example: https://s3.us-south.cloud-object-storage.appdomain.cloud
}
},
"direction": "send",
"title": "COS Upload",
"assets": {
"destination_root": "/model",
"paths": [
{
"source": os.environ['path-to-model-folder']
}
]
}
}
transfer_spec = json.dumps(transfer_spec)
# create a transfer request
transfer_request = transfer_manager.TransferRequest(
transferType=transfer_manager.FILE_REGULAR,
config=transfer_manager.TransferConfig(),
transferSpec=transfer_spec
)
# send start transfer request to transfer manager daemon
try:
transfer_response = client.StartTransfer(transfer_request)
transfer_id = transfer_response.transferId
print(f"Transfer started with id {transfer_id}")
except grpc.RpcError as e:
print(f"Error starting transfer: {e.code()}: {e.details()}")
return
# monitor transfer status
try:
# Monitor transfer status
while True:
response = client.MonitorTransfers(
transfer_manager.RegistrationRequest(
filters=[transfer_manager.RegistrationFilter(
transferId=[transfer_id]
)]))
for transfer_info in response:
print(f"Transfer info: {transfer_info}")
# Check transfer status in response
status = transfer_info.status
if status == transfer_manager.FAILED or status == transfer_manager.COMPLETED:
print(f"Transfer finished with status {status}")
return
# Wait before polling again
time.sleep(5)
except grpc.RpcError as e:
print(f"Error monitoring transfer: {e.code()}: {e.details()}")
except Exception as e:
print(f"Unexpected error: {str(e)}", file=sys.stderr)
if __name__ == '__main__':
# Start the Aspera Transfer SDK daemon
daemon_process = start_aspera_daemon()
# Run the file transfer
run()
# Optionally, stop the Aspera daemon after transfer
daemon_process.terminate()
print("Aspera Transfer SDK daemon stopped")
타사에서 제공하는 도구를 사용하여 IBM Cloud Object Storage에 모델 업로드하기
타사 소프트웨어를 사용하여 모델을 IBM Cloud Object Storage에 업로드할 수 있습니다.
다음 예제 단계에 따라 IBM Cloud Object Storage에 모델을 업로드하려면 Amazon Web Services 명령줄 인터페이스를 사용하세요:
pip
을 사용하여 Amazon Web Services 명령줄 인터페이스를 설치합니다:pip install awscli
필요한 환경 변수를 설정합니다:
export AWS_ACCESS_KEY_ID="<your access key>" export AWS_SECRET_ACCESS_KEY="<your secret access key>" export ENDPOINT="<s3 endpoint URL>" export BUCKET_NAME="<name of the bucket to upload the model>" MODEL_FOLDER=${MODEL_NAME//\//-} # The name of the created folder is based on model name. export MODEL_FOLDER=${MODEL_FOLDER//./-} # Just in case, we're removing slashes and dots from it.
IBM Cloud Object Storage 버킷에 Amazon Web Services 명령줄 인터페이스를 사용하여 모델을 추가합니다:
aws --endpoint-url ${ENDPOINT} s3 cp ${MODEL_DIR} s3://${BUCKET_NAME}/${MODEL_FOLDER}/ --recursive --follow-symlinks