0 / 0
Volver a la versión inglesa de la documentación
Descarga de un foundation model personalizado y configuración del almacenamiento
Última actualización: 28 nov 2024
Descarga de un foundation model personalizado y configuración del almacenamiento

Para implementar un foundation model personalizado para inferencias con watsonx.ai, debe cargar el modelo en un almacenamiento de objetos en la nube. Puede utilizar el bucket en IBM Cloud Object Storage que está asociado a su espacio de despliegue o un almacenamiento en la nube externo.

Descarga de modelos de repositorios públicos

Puede utilizar los repositorios públicos de modelos para descargar modelos de cimientos. Es posible que los repositorios públicos de modelos le exijan crear una cuenta antes de descargar modelos de ellos.

Por ejemplo, puede utilizar Hugging Face, un repositorio público de modelos, para descargar modelos de cimientos personalizados para su caso de uso. Debe configurar un " cuenta Hugging Face " para descargar el modelo de " Hugging Face.

Descarga de un modelo

Estos pasos demuestran cómo descargar un foundation model personalizado utilizando un modelo de Hugging Face. Siga estos pasos para descargar un foundation model personalizado mediante la interfaz de línea de comandos Hugging Face:

  1. Instale el paquete huggingface-cli con pip:

    pip install -U "huggingface_hub[cli]"
    
  2. Comprueba que el huggingface-cli está correctamente configurado:

    huggingface-cli --help
    
  3. Configure las variables de entorno necesarias:

    export HF_TOKEN="<your Hugging Face token>"
    export MODEL_NAME="<name of the model>"
    export MODEL_DIR="<directory to download the model to>"
    
  4. Crea un directorio en tu disco local para descargar el modelo:

    mkdir ${MODEL_DIR}
    
  5. Conéctese a la interfaz de línea de comandos de Hugging Face y descargue el modelo:

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

Convertir un modelo al formato requerido

Antes de añadir un modelo al almacenamiento de objetos, debe asegurarse de que su modelo es compatible con el estándar Text Generation Inference (TGI) y está construido con una arquitectura de modelo y un tipo de modelo compatibles. Para obtener más información, consulte Planificación de la implantación de un foundation model personalizado.

Si su modelo fue ajustado con InstructLab, la conversión al formato safetensors podría no ser posible:

  • Los modelos que se pusieron a punto en Linux requieren conversión.
  • Los modelos que se ajustaron en un Mac no se pueden convertir.
  • Los modelos que se ajustaron y guardaron en el formato .gguf (en cualquier entorno) no se pueden convertir.

Para convertir un modelo que fue ajustado con InstructLab, utilice el código en Este repositorio para convertir su modelo.

Para todos los demás modelos, si su modelo no está en el formato safetensors y no contiene el archivo tokenizer.json, siga estos pasos para convertir su modelo al formato requerido. De lo contrario, pasa a la sección de Configuración del almacenamiento de objetos en la nube y adición del modelo.

  1. Instale podman Desktop en su máquina local.

  2. Saca la imagen TGIS:

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

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

Subir el modelo al almacenamiento de objetos en la nube

Puede cargar su modelo en un bucket de IBM Cloud Object Storage o en cualquier otro bucket de almacenamiento, como Amazon Simple Storage ServiceAmazon S3). Estos son algunos de los almacenamientos de objetos en la nube que ofrece IBM:

Subir el modelo a IBM Cloud Object Storage mediante el IBM Aspera Transfer SDK

Requisitos previos:

  • Descargue el IBM Aspera Transfer SDK. Haga clic en este enlace.
  • Configure estas variables de entorno:
    • Ruta a IBM Aspera Transfer SDK como el path-to-aspera
    • Ruta a la carpeta con el modelo como path-to-model-folder
    • Nombre del cubo al que transferir el modelo como bucket-name
    • Tu clave API de almacenamiento de objetos en la nube como api-key
    • Tu ID de instancia del servicio de almacenamiento de objetos en la nube como cos-service-instance-id
    • Su punto final del servicio de almacenamiento de objetos en la nube como cos-service-endpoint

Utilice este script para subir su modelo a IBM Cloud Object Storage utilizando el 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")

Subir el modelo a IBM Cloud Object Storage mediante herramientas que proporcionan terceros

Puede utilizar software de terceros para cargar su modelo en IBM Cloud Object Storage.

Siga estos pasos de ejemplo para cargar su modelo en IBM Cloud Object Storage mediante la interfaz de línea de comandos de Amazon Web Services:

  1. Instala la interfaz de línea de comandos Amazon Web Services con pip:

    pip install awscli
    
  2. Establezca las variables de entorno necesarias:

    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. Añada el modelo al bucket IBM Cloud Object Storage mediante la interfaz de línea de comandos Amazon Web Services:

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

Paso siguiente

Crear un activo de modelo

Tema principal: Planificación del despliegue de un foundation model personalizado

Búsqueda y respuesta de IA generativa
Estas respuestas las genera un modelo de lenguaje grande en watsonx.ai que se basa en el contenido de la documentación del producto. Más información