0 / 0

Scaricare un modello di fondazione personalizzato e impostare l'archiviazione

Ultimo aggiornamento: 10 lug 2025
Scaricare un modello di fondazione personalizzato e impostare l'archiviazione

Per distribuire un modello di fondazione personalizzato per l'inferenza con watsonx.ai, è necessario caricare il modello su un archivio di oggetti nel cloud. È possibile utilizzare il bucket di IBM Cloud Object Storage associato allo spazio di distribuzione o a un cloud storage esterno.

Seguire questi passaggi per scaricare un modello di fondazione personalizzato da un repository pubblico e quindi caricarlo nell'archivio oggetti del cloud:

  1. Scaricare il modello da un repository pubblico
  2. Solo modelli di uso generale: Convertire il modello nel formato richiesto
  3. Solo modelli di serie temporali: Generare il file tsfm_config.json
  4. Caricare il modello nell'archivio oggetti del cloud

Scaricare i modelli dai repository pubblici

Nota:

È possibile utilizzare archivi di modelli pubblici da cui scaricare i modelli di fondazione. I depositi di modelli pubblici potrebbero richiedere la creazione di un account prima di scaricare i modelli. Ad esempio, si può usare Hugging Face, un repository pubblico di modelli, per scaricare modelli di fondazione personalizzati per il proprio caso d'uso. Per scaricare il modello da Hugging Face è necessario creare un account Hugging Face.

Questi passaggi mostrano come scaricare un modello di fondazione personalizzato utilizzando un modello Hugging Face. Seguite questi passaggi per scaricare un modello di fondazione personalizzato utilizzando l'interfaccia a riga di comando Hugging Face :

  1. Installare il pacchetto huggingface-cli con pip:

    pip install -U "huggingface_hub[cli]"
    
  2. Verificare che huggingface-cli sia impostato correttamente:

    huggingface-cli --help
    
  3. Configurare le variabili d'ambiente necessarie:

    export HF_TOKEN="<your Hugging Face token>"
    export MODEL_NAME="<name of the model>"
    export MODEL_DIR="<directory to download the model to>"
    
  4. Impostare una directory sul disco locale in cui scaricare il modello:

    mkdir ${MODEL_DIR}
    
  5. Accedere all'interfaccia a riga di comando Hugging Face e scaricare il modello:

    huggingface-cli login --token ${HF_TOKEN}
    huggingface-cli download ${MODEL_NAME} --local-dir ${MODEL_DIR} --cache-dir ${MODEL_DIR}
    

Conversione di un modello nel formato richiesto

I modelli a serie temporali non richiedono alcuna conversione in questa fase. Se si sta scaricando un modello di serie temporali, passare alla sezione Generazione del file tsfm_config.json per i modelli di serie temporali.

Prima di aggiungere un modello all'archiviazione a oggetti, è necessario assicurarsi che il modello sia compatibile con lo standard Text Generation Inference (TGI) e che sia costruito con un'architettura e un tipo di modello supportati. Per ulteriori informazioni, vedere Pianificazione della distribuzione di un modello di fondazione personalizzato.

Se il modello è stato messo a punto con InstructLab, la conversione al formato safetensors potrebbe non essere possibile:

  • I modelli messi a punto in ambiente Linux richiedono una conversione.
  • I modelli messi a punto su Mac non possono essere convertiti.
  • I modelli che sono stati messi a punto e salvati nel formato .gguf (in qualsiasi ambiente) non possono essere convertiti.

Per convertire un modello messo a punto con InstructLab, utilizzare il codice in Questo repository per convertire il modello.

Per tutti gli altri modelli, se il vostro modello non è nel formato safetensors e non contiene il file tokenizer.json, seguite questi passaggi per convertire il vostro modello nel formato richiesto. Altrimenti, passare alla sezione Impostazione del cloud storage e aggiunta del modello.

  1. Installare podman Desktop sul computer locale.

  2. Estrarre l'immagine TGIS:

    export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74"
    podman pull ${TGIS_IMAGE}
    
  3. Convertire il modello:

    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}'
    

Generazione del file tsfm_config.json per i modelli di serie temporali

I modelli generici non richiedono il file tsfm_config.json . Se si sta scaricando un modello generico, passare alla sezione Impostazione del cloud storage e aggiunta del modello.

La directory del modello per i modelli di serie temporali deve contenere il file tsfm_config.json . I modelli di serie temporali ospitati su Hugging Face (model_type: tinytimemixer) non possono includere questo file. Se il file non è presente quando il modello viene scaricato e distribuito, la previsione fallirà. Se il file non è presente nella directory del modello, procedere come segue:

Prerequisiti:

  • Per generare i file, nel vostro ambiente deve essere installato Python versione 3.9 o superiore.
  • Poiché è richiesta l'installazione di un pacchetto, se si opera in un ambiente air-gapped, è necessario eseguire lo script su un computer che abbia accesso a Internet e quindi trasferire i file generati nel proprio ambiente air-gapped.
  1. Eseguire questo codice per installare i due pacchetti necessari sulla macchina locale:

    pip3 install granite-tsfm==0.2.27
    pip3 install ibm-cos-sdk
    
  2. Creare ed eseguire uno script Python che crei il file mancante:

    from tsfm_public import TinyTimeMixerForPrediction
    from tsfm_public.toolkit.service_util import save_deployment_package
    
    # Instantiate the model
    target_columns = ["total load actual"]
    zeroshot_model = TinyTimeMixerForPrediction.from_pretrained(
        "ibm-granite/granite-timeseries-ttm-r2",  # Name of the model on Hugging Face
        num_input_channels=len(target_columns),  # tsp.num_input_channels
    )
    
    save_deployment_package("ttm", zeroshot_model)
    

    Lo script genera tre file: config.json, model.safetensors e tsfm_config.json e li salva nella directory ttm .

  3. Copiare il file tsfm_config.json generato nella directory in cui si trova il modello scaricato.

Caricamento del modello sul cloud object storage

È possibile caricare il modello in un bucket dell'IBM Cloud Object Storage o in qualsiasi altro bucket di archiviazione, come Amazon Simple Storage ServiceAmazon S3). Ecco alcuni degli archivi di oggetti in cloud offerti da IBM:

Caricare il modello su IBM Cloud Object Storage utilizzando l'IBM Aspera Transfer SDK

Prerequisiti:

  • Scaricare il IBM Aspera Transfer SDK. Fate clic su questo link.
  • Impostare queste variabili d'ambiente:
    • Percorso di IBM Aspera Transfer SDK come path-to-aspera
    • Percorso della cartella con il modello come path-to-model-folder
    • Nome del secchio in cui trasferire il modello come bucket-name
    • La chiave API per l'archiviazione degli oggetti nel cloud come api-key
    • L'ID dell'istanza del servizio di cloud object storage come cos-service-instance-id
    • L'endpoint del servizio di memorizzazione degli oggetti nel cloud come cos-service-endpoint

Utilizzate questo script per caricare il vostro modello su IBM Cloud Object Storage utilizzando il 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")

Caricare il modello su IBM Cloud Object Storage utilizzando strumenti forniti da terze parti

È possibile utilizzare software di terze parti per caricare il modello su IBM Cloud Object Storage.

Seguite questi passi di esempio per caricare il vostro modello su IBM Cloud Object Storage usando l'interfaccia a riga di comando Amazon Web Services:

  1. Installare l'interfaccia a riga di comando Amazon Web Services con pip:

    pip install awscli
    
  2. Impostare le variabili d'ambiente richieste:

    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. Aggiungere il modello al bucket IBM Cloud Object Storage utilizzando l'interfaccia a riga di comando Amazon Web Services:

    aws --endpoint-url ${ENDPOINT} s3 cp ${MODEL_DIR} s3://${BUCKET_NAME}/${MODEL_FOLDER}/ --recursive --follow-symlinks
    

Passo successivo

Creazione di una risorsa modello

Argomento principale: Pianificazione della distribuzione di un modello di fondazione personalizzato