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 :
- Télécharger le modèle à partir d'un dépôt public
- Modèles à usage général uniquement : Convertir le modèle au format requis
- Modèles de séries temporelles uniquement : Générer le fichier tsfm_config.json
- 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
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 :
Installez le paquet
huggingface-cli
avecpip
:pip install -U "huggingface_hub[cli]"
Vérifiez que le huggingface-cli est correctement configuré :
huggingface-cli --help
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>"
Créez un répertoire sur votre disque local pour y télécharger le modèle :
mkdir ${MODEL_DIR}
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.
Installez
podman
Desktop sur votre machine locale.Tirer l'image TGIS :
export TGIS_IMAGE="quay.io/modh/text-generation-inference:rhoai-2.8-58cac74" podman pull ${TGIS_IMAGE}
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é.
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
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
, ettsfm_config.json
et les enregistre dans le répertoirettm
.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
- Chemin d'accès à IBM Aspera Transfer SDK en tant que
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 :
Installez l'interface de ligne de commande Amazon Web Services avec
pip
:pip install awscli
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.
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é