Lance : un format de lakehouse ouvert pour l'IA multimodale
Format Lakehouse ouvert pour l’IA multimodale. Convertissez à partir de Parquet en 2 lignes de code pour un accès aléatoire, un index vectoriel et une gestion des versions de données 100 fois plus rapides. Compatible avec Pandas, DuckDB, Polars, Pyarrow et PyTorch avec d'autres intégrations à venir.
En bref
- De quoi s’agit-il ?
- Ce que couvre réellement le README du dépôt Lance : les spécifications de fichier, de table et de catalogue, les performances annoncées et ce qui reste non vérifié.
- À qui s’adresse-t-il ?
- Le README avance des affirmations concrètes sur les performances et la compatibilité, mais les détails qui permettraient de les vérifier ne figurent pas dans le dépôt. Le contrat de version de stockage est le seul mécanisme que le README décrit pour la compatibilité à long terme, et les chiffres de benchmark ne sont accompagnés d'aucune méthodologie.
- Puis-je l’utiliser commercialement ?
- Oui. Apache-2.0 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 3 jours.
- En quel langage est-il écrit ?
- Principalement Rust, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 14 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
La composition du format
Lance est décrit dans son README comme un format de lakehouse ouvert pour l'IA multimodale. Le projet regroupe trois spécifications : un format de fichier pour stocker les données, un format de table pour les organiser et une spécification de catalogue pour les gérer, le tout conçu pour fonctionner sur du stockage objet. Le README nomme trois charges de travail cibles : la construction de moteurs de recherche et de feature stores avec recherche hybride, l'entraînement ML à grande échelle nécessitant des E/S performantes et un accès aléatoire, et le stockage et l'interrogation de données multimodales telles que images, vidéos, audio, texte et plongements. Le langage principal du dépôt est Rust, avec des liaisons Python et Java couvertes plus loin dans le README.
La liste des fonctionnalités
La liste des fonctionnalités du README couvre six domaines. La recherche hybride combine la recherche par similarité vectorielle, la recherche en texte intégral BM25 et l'analyse SQL sur le même jeu de données, avec des index secondaires accélérés. L'accès aléatoire est annoncé comme 100 fois plus rapide que Parquet ou Iceberg sans sacrifier les performances de scan, mais le README ne précise pas les conditions de test de cette comparaison dans cette section. Les données multimodales sont stockées sous forme de blobs avec chargement paresseux. L'évolution des données permet d'ajouter des colonnes avec des valeurs de remplacement sans réécrire toute la table. Le versionnage est automatique, sans copie, avec des transactions ACID, et prend en charge le voyage dans le temps, les tags et les branches. Le README liste également les intégrations avec Apache Arrow, Pandas, Polars, DuckDB, Apache Spark, Ray, Trino, Apache Flink et des catalogues ouverts comme Apache Polaris, Unity Catalog et Apache Gravitino.
Compatibilité des versions de stockage
Le README aborde directement la stabilité du format de fichier. Chaque jeu de données stocke une data_storage_version, et les versions de stockage stables sont décrites comme un contrat de compatibilité à long terme : une fois qu'un jeu de données est écrit avec une version stable, les futures versions de Lance continueront de le lire. La compatibilité SDK et API est traitée séparément de la compatibilité du format de fichier ; les changements d'API suivent le versionnage sémantique et sont documentés dans le guide de migration. Le README avertit que les anciennes versions de Lance peuvent ne pas comprendre les versions de format introduites plus tard, et que les déploiements mixtes doivent épingler data_storage_version pour des écritures déterministes. L'alias de format next est qualifié d'instable et ne doit être utilisé que pour l'expérimentation, jamais pour des données de production. Le README ne définit pas la liste réelle des versions de stockage stables ni la matrice de compatibilité ; il renvoie à un guide distinct de versionnage du format.
Le parcours de démarrage rapide
Le démarrage rapide guide l'installation avec pip install pylance, la conversion d'un fichier Parquet vers Lance avec lance.write_dataset, puis la lecture en tant que jeu de données PyArrow. L'accès Pandas passe par dataset.to_table().to_pandas(). DuckDB peut interroger le jeu de données directement, avec un commentaire du README avertissant que DuckDB v0.7 ou plus est nécessaire pour éviter un segfault. L'exemple de recherche vectorielle télécharge le sous-ensemble SIFT 1M, convertit le fichier binaire .fvecs en table Lance, construit un index IVF_PQ avec 256 partitions et 16 sous-vecteurs, puis exécute des requêtes de k-plus-proches-voisins via le paramètre nearest de dataset.to_table(). L'exemple n'utilise DuckDB que pour échantillonner 100 vecteurs de requête ; le README n'explique pas ce que signifient les paramètres IVF_PQ ni comment les régler.
Les benchmarks du README
La section benchmarks rapporte deux séries de mesures. Sur le jeu de données SIFT avec 1 million de vecteurs à 128 dimensions, le README rapporte un temps de réponse moyen inférieur à 1 milliseconde pour 100 vecteurs de requête échantillonnés aléatoirement, mesuré sur un MacBook Air M2 de 2023. Il inclut également un graphique rappel contre latence pour montrer le compromis ANN. Une comparaison distincte utilisant le jeu de données Oxford Pet affirme que Lance est 50 à 100 fois meilleur que la lecture des métadonnées brutes pour les requêtes analytiques, et 100 fois meilleur que Parquet et les fichiers bruts pour l'accès aléatoire par lots. Le README ne décrit pas le matériel exact, les tailles de données ou le mélange de requêtes derrière ces chiffres ; ce sont donc des valeurs rapportées par le projet, non vérifiées indépendamment. Les images de benchmark sont référencées mais pas décrites dans le texte.
Structure du dépôt et écosystème · lance format lance
La structure du dépôt divise le projet en quatre parties : rust contient l'implémentation principale, python les liaisons PyO3, java les liaisons JNI et docs les sources de documentation. La liste des fonctionnalités du README nomme Apache Arrow, Pandas, Polars, DuckDB, Apache Spark, Ray, Trino, Apache Flink et des catalogues ouverts tels qu'Apache Polaris, Unity Catalog et Apache Gravitino comme intégrations actuelles, et annonce d'autres intégrations à venir sans les nommer. La licence du dépôt est Apache-2.0, qui accorde des droits d'utilisation, de reproduction et de distribution de l'œuvre et des œuvres dérivées. Le texte de la licence ne dit rien sur le support, la garantie ou les assurances de sécurité ; le README n'aborde pas non plus ces sujets.
Conclusion éditoriale
Le README avance des affirmations concrètes sur les performances et la compatibilité, mais les détails qui permettraient de les vérifier ne figurent pas dans le dépôt. Le contrat de version de stockage est le seul mécanisme que le README décrit pour la compatibilité à long terme, et les chiffres de benchmark ne sont accompagnés d'aucune méthodologie. Pour les décisions de production, le README renvoie lui-même au guide de versionnage du format et au guide de migration plutôt que de fournir le tableau complet dans le dépôt.
Notes de la communauté