0 / 0
Retourner à la version anglaise de la documentation
Téléchargement d'un foundation model personnalisé et configuration du stockage
Dernière mise à jour : 28 nov. 2024
Téléchargement d'un foundation model personnalisé et configuration du stockage

Pour déployer un foundation model 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 godet dans IBM Cloud Object Storage qui est associé à votre espace de déploiement ou à un stockage cloud externe.

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

Vous pouvez utiliser les dépôts de modèles publics pour télécharger les 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 compteHugging Face pour télécharger le modèle à partir de Hugging Face

Téléchargement d'un modèle

Ces étapes montrent comment télécharger un foundation model personnalisé en utilisant le modèle Hugging Face Suivez ces étapes pour télécharger un foundation model 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

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

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 foundation model personnalisé