Um ein benutzerdefiniertes foundation model für das Inferencing mit watsonx.ai bereitzustellen, müssen Sie das Modell in einen Cloud-Objektspeicher hochladen. Sie können den Bucket im IBM Cloud Object Storage verwenden, der mit Ihrem Bereitstellungsbereich verknüpft ist, oder einen externen Cloud-Speicher.
Herunterladen von Modellen aus öffentlichen Repositories
Sie können öffentliche Modell-Repositories verwenden, um Fundamentmodelle herunterzuladen. Bei öffentlichen Modell-Repositories müssen Sie möglicherweise ein Konto einrichten, bevor Sie Modelle von dort herunterladen können.
Sie können zum Beispiel Hugging Face, ein öffentliches Modell-Repository, verwenden, um benutzerdefinierte Basismodelle für Ihren Anwendungsfall herunterzuladen. Sie müssen ein Hugging Face einrichten, um das Modell von Hugging Face herunterladen zu können.
Modell herunterladen
Diese Schritte veranschaulichen, wie ein benutzerdefiniertes foundation model unter Verwendung eines Hugging Face heruntergeladen werden kann. Führen Sie die folgenden Schritte aus, um ein benutzerdefiniertes foundation model über die Befehlszeilenschnittstelle Hugging Face herunterzuladen:
Installieren Sie das Paket
huggingface-cli
mitpip
:pip install -U "huggingface_hub[cli]"
Überprüfen Sie, ob der huggingface-cli korrekt eingerichtet ist:
huggingface-cli --help
Konfigurieren Sie die erforderlichen Umgebungsvariablen:
export HF_TOKEN="<your Hugging Face token>" export MODEL_NAME="<name of the model>" export MODEL_DIR="<directory to download the model to>"
Legen Sie ein Verzeichnis auf Ihrer lokalen Festplatte an, in das Sie das Modell herunterladen möchten:
mkdir ${MODEL_DIR}
Melden Sie sich bei der Befehlszeilenschnittstelle von Hugging Face an und laden Sie das Modell herunter:
huggingface-cli login --token ${HF_TOKEN} huggingface-cli download ${MODEL_NAME} --local-dir ${MODEL_DIR} --cache-dir ${MODEL_DIR}
Konvertierung eines Modells in das gewünschte Format
Bevor Sie ein Modell zum Objektspeicher hinzufügen, müssen Sie sicherstellen, dass Ihr Modell mit dem TGI-Standard (Text Generation Inference) kompatibel ist und mit einer unterstützten Modellarchitektur und einem unterstützten Modelltyp aufgebaut ist. Weitere Informationen finden Sie unter Planung der Bereitstellung eines benutzerdefinierten foundation model.
Wenn Ihr Modell mit InstructLab, feinabgestimmt wurde, ist eine Konvertierung in das safetensors
-Format möglicherweise nicht möglich:
- Modelle, die in einer Linux-Umgebung feinabgestimmt wurden, müssen konvertiert werden.
- Modelle, die auf einem Mac feinabgestimmt wurden, können nicht konvertiert werden.
- Modelle, die feinabgestimmt und im Format
.gguf
(in einer beliebigen Umgebung) gespeichert wurden, können nicht konvertiert werden.
Um ein Modell zu konvertieren, das mit InstructLab, feinabgestimmt wurde, verwenden Sie den Code in Diesem Repository, um Ihr Modell zu konvertieren.
Wenn Ihr Modell nicht im Format safetensors
vorliegt und die Datei tokenizer.json
nicht enthält, gehen Sie wie folgt vor, um Ihr Modell in das erforderliche Format zu konvertieren. Andernfalls fahren Sie mit dem Abschnitt Einrichten von Cloud Object Storage und Hinzufügen des Modells fort.
Installieren Sie
podman
Desktop auf Ihrem lokalen Rechner.Ziehen Sie das TGIS-Bild:
export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74" podman pull ${TGIS_IMAGE}
Konvertieren Sie das Modell:
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}'
Hochladen des Modells in den Cloud-Objektspeicher
Sie können Ihr Modell in einen Bucket im IBM Cloud Object Storage oder in einen anderen Speicher-Bucket, wie Amazon Simple Storage ServiceAmazon S3), hochladen. Hier sind einige der von IBM angebotenen Cloud-Objektspeicher:
Hochladen des Modells auf IBM Cloud Object Storage unter Verwendung des IBM Aspera Transfer SDK
Voraussetzungen:
- Laden Sie das IBM Aspera Transfer SDK herunter. Klicken Sie auf diesen Link.
- Setzen Sie diese Umgebungsvariablen:
- Pfad zu IBM Aspera Transfer SDK als
path-to-aspera
- Pfad zu dem Ordner mit dem Modell als
path-to-model-folder
- Name des Eimers, in den das Modell als
bucket-name
übertragen wird - Ihr API-Schlüssel für die Speicherung von Cloud-Objekten als
api-key
- Die Instanz-ID Ihres Cloud-Objektspeicherdienstes als
cos-service-instance-id
- Ihr Endpunkt für den Cloud-Objektspeicherdienst als
cos-service-endpoint
- Pfad zu IBM Aspera Transfer SDK als
Verwenden Sie dieses Skript, um Ihr Modell mit Hilfe des IBM Aspera Transfer SDK auf den IBM Cloud Object Storage hochzuladen:
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")
Hochladen des Modells in den IBM Cloud Object Storage mit Hilfe von Tools, die von Drittanbietern bereitgestellt werden
Sie können Software von Drittanbietern verwenden, um Ihr Modell auf IBM Cloud Object Storage hochzuladen.
Folgen Sie diesen Beispielschritten, um Ihr Modell über die IBM Cloud Object Storage-Befehlszeilenschnittstelle in den Amazon Web Services hochzuladen:
Installieren Sie die Amazon Web Services Befehlszeilenschnittstelle mit
pip
:pip install awscli
Setzen Sie die erforderlichen Umgebungsvariablen:
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.
Fügen Sie das Modell zum IBM Cloud Object Storage Bucket hinzu, indem Sie die Amazon Web Services Befehlszeilenschnittstelle verwenden:
aws --endpoint-url ${ENDPOINT} s3 cp ${MODEL_DIR} s3://${BUCKET_NAME}/${MODEL_FOLDER}/ --recursive --follow-symlinks
Nächster Schritt
Übergeordnetes Thema: Planung der Bereitstellung eines benutzerdefinierten foundation model