Hub Python Library documentation
Migration vers huggingface_hub v1.0
Migration vers huggingface_hub v1.0
La version v1.0 est une étape majeure pour la bibliothèque huggingface_hub. Elle marque notre engagement envers la stabilité de l'API et la maturité de la bibliothèque. Nous avons apporté plusieurs améliorations et modifications cassantes pour rendre la bibliothèque plus robuste et plus facile à utiliser.
Ce guide est conçu pour vous aider à migrer votre code existant vers la nouvelle version. Si vous avez des questions ou des commentaires, n'hésitez pas à nous le faire savoir en ouvrant un ticket sur GitHub.
Python 3.9+
huggingface_hub nécessite désormais Python 3.9 ou une version supérieure. Python 3.8 n'est plus pris en charge.
Migration vers HTTPX
La bibliothèque huggingface_hub utilise désormais httpx au lieu de requests pour les requêtes HTTP. Ce changement a été effectué pour améliorer les performances et pour prendre en charge les requêtes synchrones et asynchrones de la même manière. Nous avons donc supprimé les dépendances requests et aiohttp.
Changements majeurs
Il s'agit d'une modification majeure qui affecte l'ensemble de la bibliothèque. Bien que nous ayons cherché à rendre ce changement aussi transparent que possible, il se peut que vous deviez mettre à jour votre code dans certains cas. Voici la liste des modifications cassantes introduites dans le processus :
- Configuration du proxy : les proxys « par méthode » ne sont plus pris en charge. Les proxys doivent être configurés de manière globale à l’aide des variables d’environnement
HTTP_PROXYetHTTPS_PROXY. - Backend HTTP personnalisé : la fonction
configure_http_backenda été supprimée. Vous devez désormais utiliser set_client_factory() et set_async_client_factory() pour configurer les clients HTTP. - Gestion des erreurs : les erreurs HTTP ne sont plus héritées de
requests.HTTPError, mais dehttpx.HTTPError. Nous recommandons d’attraper HfHubHTTPError (importé avecfrom huggingface_hub.utils import HfHubHTTPError), qui est une sous-classe derequests.HTTPErroren v0.x et dehttpx.HTTPErroren v1.x. Attraper l’erreur depuishuggingface_hubgarantit que votre code est compatible avec les anciennes et les nouvelles versions de la bibliothèque. - SSLError :
httpxne possède pas le concept deSSLError. Il s'agit désormais d'une erreur génériquehttpx.ConnectError. LocalEntryNotFoundError: cette erreur n’hérite plus deHTTPError. Nous définissons désormaisEntryNotFoundError(nouvelle), dont héritent à la foisLocalEntryNotFoundError(si le fichier n’est pas trouvé dans le cache local) etRemoteEntryNotFoundError(si le fichier n’est pas trouvé dans le dépôt sur le Hub). Seule l’erreur distante hérite deHTTPError.InferenceClient: leInferenceClientpeut désormais être utilisé comme gestionnaire de contexte. C'est particulièrement utile lors du streaming de tokens depuis un modèle de langage pour s'assurer que la connexion est correctement fermée.AsyncInferenceClient: le paramètretrust_enva été supprimé du constructeur deAsyncInferenceClient. Les variables d’environnement sont faites confiance par défaut parhttpx. Si vous ne souhaitez pas explicitement faire confiance à l’environnement, vous devez le configurer avec set_async_client_factory().
Pour plus de détails, vous pouvez consulter PR #3328 qui a introduit httpx.
Pourquoi httpx ?
La migration de requests vers httpx apporte plusieurs améliorations clés qui renforcent les performances, la fiabilité et la maintenabilité de la bibliothèque :
Sécurité des threads et réutilisation des connexions : httpx est conçu pour être sûr en environnement multithreadé, ce qui nous permet de réutiliser en toute sécurité le même client à travers plusieurs threads. Cette réutilisation des connexions réduit le surcoût lié à l'établissement de nouvelles connexions pour chaque requête HTTP, améliorant ainsi les performances, en particulier lors de requêtes fréquentes vers le Hub.
Prise en charge de HTTP/2 : httpx offre une prise en charge native de HTTP/2, ce qui permet une meilleure efficacité lors de l'envoi de plusieurs requêtes vers le même serveur (ce qui correspond exactement à notre cas d'usage). Cela se traduit par une latence plus faible et une consommation de ressources réduite par rapport à HTTP/1.1.
API unifiée synchrone/asynchrone : Contrairement à notre configuration précédente qui utilisait des dépendances distinctes requests (synchrone) et aiohttp (asynchrone), httpx fournit des clients synchrones et asynchrones au comportement identique. Cela garantit que InferenceClient et AsyncInferenceClient disposent de fonctionnalités cohérentes et élimine les différences subtiles de comportement qui existaient auparavant entre les deux implémentations.
Gestion améliorée des erreurs SSL : httpx gère les erreurs SSL de manière plus souple, ce qui facilite et fiabilise le débogage des problèmes de connexion.
Architecture pérenne : httpx est activement maintenu et conçu pour les applications Python modernes. En revanche, requests est en mode maintenance et ne recevra pas de mises à jour majeures telles que des améliorations de la sécurité des threads ou la prise en charge de HTTP/2.
Gestion améliorée des variables d’environnement : httpx offre une gestion plus cohérente des variables d’environnement dans les contextes synchrones et asynchrones, éliminant les incohérences précédentes où requests lisait les variables d’environnement locales par défaut tandis que aiohttp ne le faisait pas.
Le passage à httpx dote huggingface_hub d’un backend HTTP moderne, efficace et maintenable. Bien que la plupart des utilisateurs devraient constater un fonctionnement sans accroc, les améliorations sous-jacentes offrent de meilleures performances et une plus grande fiabilité pour toutes les interactions avec le Hub.
hf_transfer
Maintenant que tous les dépôts du Hub sont activés pour Xet et que hf_xet est la méthode par défaut pour télécharger/téléverser des fichiers, nous avons supprimé la prise en charge du package optionnel hf_transfer. La variable d’environnement HF_HUB_ENABLE_HF_TRANSFER est donc ignorée. Utilisez à la place HF_XET_HIGH_PERFORMANCE.
Classe de dépôt
La classe Repository a été supprimée dans la v1.0. Il s’agissait d’un simple wrapper autour de l’interface en ligne de commande git pour la gestion des dépôts. Vous pouvez toujours utiliser git directement dans le terminal, mais l’approche recommandée est d’utiliser l’API basée sur HTTP de la bibliothèque huggingface_hub pour une expérience plus fluide, en particulier lors de la manipulation de fichiers volumineux.
Voici une correspondance entre la classe Repository de la version précédente et la nouvelle classe HfApi :
méthode Repository | méthode de HfApi |
|---|---|
repo.clone_from | snapshot_download |
repo.git_add + git_commit + git_push | upload_file(), upload_folder(), create_commit() |
repo.git_tag | create_tag |
repo.git_branch | create_branch |
Classe HfFolder
HfFolder était utilisé pour gérer le jeton d’accès de l’utilisateur. Utilisez login() pour enregistrer un nouveau jeton, logout() pour le supprimer et whoami() pour vérifier l’utilisateur associé au jeton actuel. Enfin, utilisez get_token() pour récupérer le jeton de l’utilisateur dans un script.
Classe InferenceApi
InferenceApi était une classe pour interagir avec l'API d'inférence. Il est désormais recommandé d'utiliser la classe InferenceClient à la place.
Autres fonctionnalités obsolètes
Certaines méthodes et certains paramètres ont été supprimés dans la v1.0. Ceux qui sont listés ci-dessous étaient déjà obsolètes avec un message d'avertissement dans la v0.x.
constants.hf_cache_homea été supprimé. Veuillez utiliserHF_HOMEà la place.- Les paramètres
use_auth_tokenont été supprimés de toutes les méthodes. Veuillez utilisertokenà la place. - La méthode
get_token_permissiona été supprimée. - La méthode
update_repo_visibilitya été supprimée. Veuillez utiliserupdate_repo_settingsà la place. - Le paramètre
is_write_actiona été supprimé debuild_hf_headers, tout commewrite_permissiondelogin. Le concept de « permission d’écriture » a été supprimé et n’est plus pertinent maintenant que les jetons à granularité fine sont l’approche recommandée. - Le paramètre
new_sessiondelogina été renommé enskip_if_logged_inpour plus de clarté. - Les paramètres
resume_download,force_filenameetlocal_dir_use_symlinksont été supprimés dehf_hub_downloadetsnapshot_download. - Les paramètres
library,language,tagsettaskont été supprimés delist_models.
Commandes de cache CLI
La gestion du cache depuis l’interface en ligne de commande a été repensée pour suivre un flux de travail inspiré de Docker. L’outil huggingface-cli, désormais obsolète, a été supprimé ; hf (introduit dans la v0.34) le remplace par une interface en ligne de commande ressource-action plus claire.
Les commandes héritées hf cache scan et hf cache delete sont également supprimées dans la v1.0 et remplacées par le trio suivant :
hf cache lsliste les entrées du cache avec une sortie en tableau concis, JSON ou CSV. Utilisez--revisionspour inspecter des révisions individuelles, ajoutez des expressions--filtertelles quesize>1GBouaccessed>30d, et combinez-les avec--quietsi vous n’avez besoin que des identifiants.hf cache rmsupprime les entrées de cache sélectionnées. Passez un ou plusieurs identifiants de dépôt (par exemplemodel/bert-base-uncased) ou des hachages de révision, et ajoutez éventuellement--dry-runpour un aperçu ou--yespour ignorer la demande de confirmation. Cela remplace à la fois les flux de travail interactifs TUI et--disable-tuide la commande précédente.hf cache pruneexécute la tâche de nettoyage courante consistant à supprimer les révisions non référencées en une seule fois. Ajoutez--dry-runou--yesde la même manière qu’avechf cache rm.
Enfin, l'extra [cli] a été supprimé - le CLI est désormais fourni avec le package principal huggingface_hub.
Prise en charge de TensorFlow et Keras 2.x
Tout le code et les dépendances liés à TensorFlow ont été supprimés dans la v1.0. Cela inclut les modifications cassantes suivantes :
huggingface_hub[tensorflow]n'est plus une dépendance supplémentaire prise en charge- Les fonctions utilitaires
split_tf_state_dict_into_shardsetget_tf_storage_sizeont été supprimées. - Les versions
tensorflow,fastaietfastcorene sont plus incluses dans les en-têtes intégrés.
L'intégration Keras 2.x a également été supprimée. Cela inclut la classe KerasModelHubMixin ainsi que les utilitaires save_pretrained_keras, from_pretrained_keras et push_to_hub_keras. Keras 2.x est une bibliothèque obsolète et non maintenue. L'approche recommandée est d'utiliser Keras 3.x, qui est étroitement intégré au Hub (c'est-à-dire qu'il contient des méthodes intégrées pour charger/pousser vers le Hub). Si vous souhaitez toujours travailler avec Keras 2.x, vous devez rétrograder huggingface_hub à une version v0.x.
valeurs de retour de upload_file et upload_folder
Les fonctions upload_file() et upload_folder() renvoient désormais l’URL de l’engagement créé sur le Hub. Auparavant, elles renvoyaient l’URL du fichier ou du dossier. Cela permet d’aligner la valeur de retour sur celle de create_commit(), delete_file() et delete_folder().
Update on GitHub