0 / 0

Téléchargement d'un modèle de fondation personnalisé et configuration du stockage

Dernière mise à jour : 03 juil. 2025
Téléchargement d'un modèle de fondation personnalisé et configuration du stockage

Pour déployer un modèle de base personnalisé pour l'inférence avec watsonx.ai, vous devez télécharger le modèle vers un stockage d'objets dans le nuage. Vous pouvez utiliser le seau dans le site IBM Cloud Object Storage qui est associé à votre espace de déploiement ou à un espace de stockage externe dans le nuage.

Suivez ces étapes pour télécharger un modèle de fondation personnalisé à partir d'un référentiel public, puis le charger dans le stockage d'objets dans le nuage :

  1. Télécharger le modèle à partir d'un dépôt public
  2. Modèles à usage général uniquement : Convertir le modèle au format requis
  3. Modèles de séries temporelles uniquement : Générer le fichier tsfm_config.json
  4. Télécharger le modèle vers le stockage d'objets dans le nuage

Téléchargement de modèles à partir de dépôts publics

Remarque :

Vous pouvez utiliser des référentiels de modèles publics pour télécharger des modèles de fondation. Les dépôts de modèles publics peuvent exiger que vous créiez un compte avant de télécharger des modèles. Par exemple, vous pouvez utiliser Hugging Face, un référentiel de modèles public, pour télécharger des modèles de fondation personnalisés pour votre cas d'utilisation. Vous devez créer un compte Hugging Face pour télécharger le modèle à partir de Hugging Face.

Ces étapes montrent comment télécharger un modèle de fondation personnalisé en utilisant un modèle Hugging Face. Suivez ces étapes pour télécharger un modèle de fondation personnalisé à l'aide de l'interface de ligne de commande Hugging Face :

  1. Installez le paquet huggingface-cli avec pip :

    pip install -U "huggingface_hub[cli]"
    
  2. Vérifiez que le huggingface-cli est correctement configuré :

    huggingface-cli --help
    
  3. Configurez les variables d'environnement nécessaires :

    export HF_TOKEN="<your Hugging Face token>"
    export MODEL_NAME="<name of the model>"
    export MODEL_DIR="<directory to download the model to>"
    
  4. Créez un répertoire sur votre disque local pour y télécharger le modèle :

    mkdir ${MODEL_DIR}
    
  5. Connectez-vous à l'interface de ligne de commande Hugging Face et téléchargez le modèle :

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

Conversion d'un modèle au format requis

Les modèles de séries temporelles ne nécessitent aucune conversion à ce stade. Si vous téléchargez un modèle de série temporelle, passez à la section Générer le fichier tsfm_config.json pour les modèles de série temporelle.

Avant d'ajouter un modèle au stockage d'objets, vous devez vous assurer que votre modèle est compatible avec la norme TGI (Text Generation Inference) et qu'il est construit avec une architecture de modèle et un type de modèle pris en charge. Pour plus d'informations, voir Planification du déploiement d'un modèle de fondation personnalisé.

Si votre modèle a été affiné avec InstructLab, la conversion au format safetensors peut ne pas être possible :

  • Les modèles qui ont été affinés dans un environnement Linux doivent être convertis.
  • Les modèles mis au point sur Mac ne peuvent pas être convertis.
  • Les modèles qui ont été affinés et enregistrés au format .gguf (dans n'importe quel environnement) ne peuvent pas être convertis.

Pour convertir un modèle qui a été affiné avec InstructLab, utilisez le code dans Ce référentiel pour convertir votre modèle.

Pour tous les autres modèles, si votre modèle n'est pas au format safetensors et ne contient pas le fichier tokenizer.json, suivez les étapes suivantes pour convertir votre modèle au format requis. Sinon, passez à la section Configuration du stockage d'objets dans le nuage et ajout du modèle.

  1. Installez podman Desktop sur votre machine locale.

  2. Tirer l'image TGIS :

    export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74"
    podman pull ${TGIS_IMAGE}
    
  3. Convertir le modèle :

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

Génération du fichier tsfm_config.json pour les modèles de séries temporelles

Les modèles à usage général ne nécessitent pas le fichier tsfm_config.json . Si vous téléchargez un modèle à usage général, passez à la section " Configurer le stockage d'objets dans le nuage et ajouter le modèle".

Le répertoire du modèle pour les modèles de séries temporelles doit contenir le fichier tsfm_config.json . Les modèles de séries temporelles hébergés sur Hugging Face (model_type : tinytimemixer) peuvent ne pas inclure ce fichier. Si le fichier n'est pas présent lorsque le modèle est téléchargé et déployé, la prévision échouera. Si vous ne voyez pas ce fichier dans le répertoire du modèle, procédez comme suit :

Prérequis :

  • Pour générer les fichiers, la version Python 3.9 ou une version plus récente doit être installée dans votre environnement.
  • L'installation des paquets étant nécessaire, si vous travaillez dans un environnement protégé, vous devez exécuter le script sur une machine ayant accès à Internet, puis transférer les fichiers générés vers votre environnement protégé.
  1. Exécutez ce code pour installer deux paquets nécessaires sur votre machine locale :

    pip3 install granite-tsfm==0.2.27
    pip3 install ibm-cos-sdk
    
  2. Créez et exécutez un script Python qui crée le fichier manquant :

    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)
    

    Le script génère trois fichiers : config.json, model.safetensors, et tsfm_config.json et les enregistre dans le répertoire ttm .

  3. Copiez le fichier tsfm_config.json généré dans le répertoire où se trouve votre modèle téléchargé.

Téléchargement du modèle vers le stockage d'objets dans le nuage

Vous pouvez télécharger votre modèle vers un godet dans IBM Cloud Object Storage ou tout autre godet de stockage, tel que Amazon Simple Storage ServiceAmazon S3. Voici quelques-uns des systèmes de stockage d'objets dans le nuage proposés par IBM

Téléchargement du modèle vers IBM Cloud Object Storage en utilisant IBM Aspera Transfer SDK

Prérequis :

  • Téléchargez le IBM Aspera Transfer SDK. Cliquez sur ce lien.
  • Définissez ces variables d'environnement :
    • Chemin d'accès à IBM Aspera Transfer SDK en tant que path-to-aspera
    • Chemin d'accès au dossier contenant le modèle en tant que path-to-model-folder
    • Nom de l'entrepôt dans lequel le modèle doit être transféré en tant que bucket-name
    • Votre clé API de stockage d'objets dans le nuage comme api-key
    • L'identifiant de l'instance de votre service de stockage d'objets dans le nuage est cos-service-instance-id
    • Le point de terminaison de votre service de stockage d'objets dans le nuage est cos-service-endpoint

Utilisez ce script pour télécharger votre modèle vers IBM Cloud Object Storage en utilisant 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")

Téléchargement du modèle vers IBM Cloud Object Storage à l'aide d'outils fournis par des tiers

Vous pouvez utiliser un logiciel tiers pour télécharger votre modèle vers IBM Cloud Object Storage.

Suivez les étapes suivantes pour télécharger votre modèle vers IBM Cloud Object Storage à l'aide de l'interface de ligne de commande Amazon Web Services :

  1. Installez l'interface de ligne de commande Amazon Web Services avec pip :

    pip install awscli
    
  2. Définir les variables d'environnement nécessaires :

    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. Ajoutez le modèle au seau IBM Cloud Object Storage en utilisant l'interface de ligne de commande Amazon Web Services :

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

Étape suivante

Création d'une ressource modèle

Sujet parent : Planifier le déploiement d'un modèle de fondation personnalisé