0 / 0
Zurück zur englischen Version der Dokumentation
Herunterladen eines benutzerdefinierten foundation model und Einrichten der Speicherung
Letzte Aktualisierung: 28. Nov. 2024
Herunterladen eines benutzerdefinierten foundation model und Einrichten der Speicherung

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:

  1. Installieren Sie das Paket huggingface-cli mit pip:

    pip install -U "huggingface_hub[cli]"
    
  2. Überprüfen Sie, ob der huggingface-cli korrekt eingerichtet ist:

    huggingface-cli --help
    
  3. 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>"
    
  4. Legen Sie ein Verzeichnis auf Ihrer lokalen Festplatte an, in das Sie das Modell herunterladen möchten:

    mkdir ${MODEL_DIR}
    
  5. 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.

  1. Installieren Sie podman Desktop auf Ihrem lokalen Rechner.

  2. Ziehen Sie das TGIS-Bild:

    export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74"
    podman pull ${TGIS_IMAGE}
    
  3. 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

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:

  1. Installieren Sie die Amazon Web Services Befehlszeilenschnittstelle mit pip:

    pip install awscli
    
  2. 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.
    
  3. 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

Erstellung einer Modellanlage

Übergeordnetes Thema: Planung der Bereitstellung eines benutzerdefinierten foundation model

Generative KI-Suche und -Antwort
Diese Antworten werden von einem großen Sprachmodell in watsonx.ai basierend auf dem Inhalt der Produktdokumentation generiert. Weitere Informationen