Modèle / jeu de données
bitsandbytes-foundation/bitsandbytes avatar
bitsandbytes-foundation/bitsandbytes

bitsandbytes : quantifier un modèle PyTorch sans quitter PyTorch

Accessible large language models via k-bit quantization for PyTorch.

8 478 étoiles929 forksPythonMIT

En bref

De quoi s’agit-il ?
La bibliothèque ajoute des couches Linear8bitLt et Linear4bit ainsi que des optimiseurs 8 bits au-dessus de PyTorch. Le README détaille une matrice de support matériel très large, mais l'installation et la compilation restent le point où un projet peut se bloquer.
À qui s’adresse-t-il ?
bitsandbytes convient aux équipes qui entraînent ou servent des modèles de langage sur PyTorch et veulent réduire la mémoire sans changer de framework : les couches Linear8bitLt et Linear4bit s'utilisent dans un modèle existant, et la licence MIT n'impose pas de contrainte de redistribution au-delà de la conservation du texte de licence.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 8 jours.
En quel langage est-il écrit ?
Principalement Python, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Trois fonctionnalités, trois problèmes de mémoire distincts

Le README énumère trois cas d'usage qui n'ont pas les mêmes contraintes. Les optimiseurs 8 bits visent l'entraînement : ils appliquent une quantification par blocs pour conserver, selon la formulation du README, les performances d'un optimiseur 32 bits à une fraction du coût mémoire. LLM.int8() vise l'inférence et repose sur une quantification vector-wise qui traite la majorité des features en 8 bits tout en isolant les valeurs aberrantes dans une multiplication matricielle 16 bits. QLoRA vise l'entraînement de modèles quantifiés en 4 bits, en insérant un petit ensemble de poids LoRA entraînables par-dessus le modèle gelé. Ces trois briques ne s'adressent donc pas au même profil : quelqu'un qui veut seulement servir un modèle se limitera à LLM.int8(), tandis que celui qui veut affiner un modèle trop gros pour sa carte regardera QLoRA. Le point commun est la contrainte mémoire, pas la méthode.

Ce que la bibliothèque expose réellement dans le graphe PyTorch

bitsandbytes ne remplace pas PyTorch : il fournit des primitives de quantification qui s'insèrent dans un modèle existant. Le README nomme explicitement bitsandbytes.nn.Linear8bitLt et bitsandbytes.nn.Linear4bit comme couches, et bitsandbytes.optim comme module d'optimiseurs 8 bits. Concrètement, cela signifie que l'adoption se fait couche par couche, en substituant des nn.Linear par les variantes quantifiées, ou indirectement via les intégrations Transformers, Diffusers et PEFT listées dans la documentation. Le README ne décrit pas l'algorithme de bout en bout, seulement les deux régimes de quantification : par blocs pour les optimiseurs, vector-wise avec traitement séparé des valeurs aberrantes pour LLM.int8(). C'est une documentation d'API plus que d'implémentation, et il faut le savoir avant de chercher dans le dépôt une explication détaillée du choix des seuils.

La matrice de support matériel est le vrai document de décision

Le README consacre une grande table aux plateformes, avec une légende explicite : une coche signifie supporté, un symbole partiel signifie partiellement supporté, un symbole de chantier signifie prévu, une croix signifie non supporté. Cette table est datée : une note précise qu'elle reflète l'état de la branche de développement et renvoie au README du tag 0.50.0 pour la dernière version stable. La distinction compte, parce que la branche main et la version publiée ne donnent pas les mêmes garanties. Sur Linux x86-64, CPU, NVIDIA, AMD et Intel GPU sont marqués supportés pour les trois fonctionnalités, avec AVX2 en minimum et AVX512F et AVX512BF16 en configuration optimisée pour le CPU. Sur Intel Gaudi, LLM.int8() est supporté, QLoRA seulement partiellement, et les optimiseurs 8 bits pas du tout. Sur macOS arm64, les optimiseurs 8 bits via Metal sont marqués comme prévus, pas disponibles. Deux astérisques signalent que certaines fonctionnalités supportées peuvent manquer d'optimisations de performance, sans préciser lesquelles. C'est la limite la plus gênante du document : le lecteur sait qu'un chemin existe, pas à quelle vitesse il tourne.

Installation : les prérequis avant la commande

Le README fixe deux minimums pour toutes les plateformes : Python 3.10 ou plus récent, et PyTorch 2.4 ou plus récent. Il recommande par ailleurs la dernière version de PyTorch, tout en indiquant viser une large compatibilité ascendante. Sur Linux, la contrainte système est glibc 2.24 minimum. Le tableau distingue aussi les backends par identifiant : cuda pour NVIDIA, AMD et, dans la table, Intel GPU est associé à xpu, Intel Gaudi à hpu, et Metal à mps. Ces identifiants sont ceux que l'on retrouve dans l'écosystème PyTorch et dans les intégrations listées. Le README ne donne pas de commande pip dans l'extrait fourni, donc la commande d'installation exacte n'est pas vérifiable ici : il faut se référer à la documentation officielle sur huggingface.co/docs/bitsandbytes/main. Les releases récentes incluent une roue continuous-release_main datée du 3 septembre 2026, aux côtés des versions 0.50.2 et 0.50.1. Installer depuis le canal continu n'est pas la même chose qu'installer un tag : le premier suit main, le second correspond à un état figé.

Là où bitsandbytes n'est pas le bon outil

Le cas le plus net est celui d'un modèle servi sur un accélérateur absent de la table, ou présent avec un symbole partiel pour la fonctionnalité visée. Un projet qui doit faire tourner QLoRA sur Gaudi, ou des optimiseurs 8 bits sur Metal, se heurte à une case non cochée, pas à un réglage à ajuster. Deuxième cas : un pipeline qui n'est pas bâti sur PyTorch. La bibliothèque est décrite comme une extension PyTorch, avec des couches nn et un module optim ; elle ne s'adresse pas à un runtime ONNX ou à un serveur d'inférence d'un autre écosystème. Troisième cas, plus subtil : les CPU aarch64 et macOS arm64 portent une astérisque indiquant un support sans optimisations de performance garanties. Un utilisateur qui choisit bitsandbytes pour la vitesse sur ces plateformes fait une hypothèse que le README ne confirme pas. Enfin, la compatibilité ascendante avec PyTorch est présentée comme un objectif, pas comme un contrat : une montée de version de PyTorch reste un événement à tester.

Face à une quantification intégrée en amont

L'alternative la plus directe n'est pas une autre bibliothèque de quantification mais la quantification déjà intégrée dans les outils voisins. Le README renvoie lui-même vers les guides Transformers, Diffusers et PEFT, qui documentent la quantification bitsandbytes depuis ces bibliothèques. La différence d'approche est réelle : passer par Transformers signifie que le chargement quantifié est piloté par la configuration du modèle et par les arguments du chargeur, sans écrire soi-même de couches Linear8bitLt. Adopter bitsandbytes directement donne un contrôle plus fin, par exemple pour quantifier un modèle qui n'est pas dans le catalogue Transformers, ou pour utiliser bitsandbytes.optim indépendamment de toute quantification de poids. Le coût de ce contrôle est la prise en charge de l'installation, de la compatibilité PyTorch et du choix du backend. Pour un modèle standard servi via Transformers, la voie intégrée évite cette charge ; pour une architecture maison ou un optimiseur 8 bits seul, l'accès direct aux modules bitsandbytes devient nécessaire.

Coût de maintenance et implications de licence

Le rythme de publication est soutenu : 0.50.1 en août 2026, 0.50.2 fin août, plus une roue continue sur main. Ce rythme a une conséquence pratique : une version figée dans un requirements.txt vieillit vite face aux versions de PyTorch publiées en parallèle. La matrice de support matériel évolue elle aussi, et le README prend soin de préciser qu'elle décrit la branche de développement, ce qui signifie qu'un comportement lu sur main peut ne pas exister dans la version installée. La licence est MIT, indiquée dans le badge du README et dans le chemin LICENSE du dépôt : elle autorise la réutilisation et la redistribution, y compris dans un produit propriétaire, à condition de conserver l'avis de copyright et le texte de licence. Aucun élément du README ne suggère de clause additionnelle. Cela dit, la licence du code ne dit rien des licences des modèles quantifiés avec la bibliothèque, qui relèvent du modèle lui-même et non de bitsandbytes.

Conclusion éditoriale

bitsandbytes convient aux équipes qui entraînent ou servent des modèles de langage sur PyTorch et veulent réduire la mémoire sans changer de framework : les couches Linear8bitLt et Linear4bit s'utilisent dans un modèle existant, et la licence MIT n'impose pas de contrainte de redistribution au-delà de la conservation du texte de licence. Il ne convient pas à qui cherche un runtime d'inférence portable, ni à qui doit servir LLM.int8() sur un Gaudi ou un MPS sans accepter la mention de support partiel du tableau. Avant d'adopter, vérifier trois choses dans cet ordre : que la version de PyTorch installée est au moins 2.4, que l'accélérateur visé figure avec une coche pleine dans la colonne correspondant à la fonctionnalité voulue, et que la roue publiée correspond bien au tag de version utilisé plutôt qu'au canal continuous-release_main.

Sources officielles

  1. bitsandbytes-foundation/bitsandbytes on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Notes de la communauté

Notes de la communauté