Une introduction à DocArray, une bibliothèque d’IA open source

DocArray est une bibliothèque pour les données imbriquées, non structurées et multimodales en transit, y compris le texte, l’image, l’audio, la vidéo, le maillage 3D, etc. Il permet aux ingénieurs d’apprentissage en profondeur de traiter, d’intégrer, de rechercher, de stocker, de recommander et de transférer efficacement des données multimodales avec une API Pythonic. À partir de novembre 2022, DocArray est open source et hébergé par l’initiative Linux Foundation AI & Data afin qu’il y ait une maison neutre pour construire et soutenir une communauté ouverte d’IA et de données. C’est le début d’une nouvelle journée pour DocArray.
Au cours des dix mois qui ont suivi la première version de DocArray, ses développeurs chez Jina AI ont vu de plus en plus d’adoption et de contributions de la part de la communauté open source. Aujourd’hui, DocArray alimente des centaines d’applications d’IA multimodales.
Contents
Héberger un projet open source avec la Linux Foundation
L’hébergement d’un projet avec la Fondation Linux suit une gouvernance ouverte, ce qui signifie qu’aucune entreprise ou personne ne contrôle un projet. Lorsque les mainteneurs d’un projet open source décident de l’héberger à la Linux Foundation, ils transfèrent spécifiquement la propriété de la marque du projet à la Linux Foundation.
Dans cet article, je passerai en revue l’histoire et l’avenir de DocArray. En particulier, je vais démontrer quelques fonctionnalités intéressantes qui sont déjà en développement.
Un bref historique de DocArray
Jina AI a introduit le concept de “DocArray” dans Jina 0.8 fin 2020. C’était le jina.types
module, destiné à compléter les modèles de conception de recherche neuronale en clarifiant la représentation des données de bas niveau dans Jina. Plutôt que de travailler directement avec Protobuf, la nouvelle classe Document offrait une API de haut niveau plus simple et plus sûre pour représenter les données multimodales.
(Jina AI, CC BY-SA 4.0)
Au fil du temps, nous avons prolongé jina.types
et est allé au-delà d’une simple interface Pythonic de Protobuf. Nous avons ajouté DocumentArray pour faciliter les opérations par lots sur plusieurs DocumentArrays. Ensuite, nous avons introduit des fonctions d’E/S et de prétraitement pour différentes modalités de données, comme le texte, l’image, la vidéo, l’audio et les maillages 3D. La classe Executor a commencé à utiliser DocumentArray pour l’entrée et la sortie. Dans Jina 2.0 (sorti à la mi-2021), le design est devenu encore plus fort. Document, Executor et Flow sont devenus les trois concepts fondamentaux de Jina :
• Le document est l’E/S de données dans Jina
• L’exécuteur définit la logique de traitement des documents
• Le flux relie les exécuteurs ensemble pour accomplir une tâche.
La communauté a adoré le nouveau design, car il a grandement amélioré l’expérience des développeurs en masquant une complexité inutile. Cela permet aux développeurs de se concentrer sur les choses qui comptent vraiment.
(Jina AI, CC BY-SA 4.0)
Comme jina.types
a grandi, il est devenu conceptuellement indépendant de Jina. Tandis que jina.types
était plus sur la construction locale, le reste de Jina se concentrait sur la service-isation. Essayer d’atteindre deux objectifs très différents dans une seule base de code a créé des obstacles de maintenance. D’un côté, jina.types
devait évoluer rapidement et continuer à ajouter des fonctionnalités pour répondre aux besoins de la communauté de l’IA en évolution rapide. D’autre part, Jina elle-même devait rester stable et robuste car elle servait d’infrastructure. Le résultat? Un ralentissement du développement.
Nous avons résolu ce problème en découplant jina.types
de Jina fin 2021. Cette refactorisation a servi de base au dernier DocArray. C’est alors que la mission de DocArray s’est cristallisée pour l’équipe : fournir une structure de données aux ingénieurs en IA pour représenter, stocker, transmettre et intégrer facilement des données multimodales. DocArray se concentre sur l’expérience des développeurs locaux, optimisée pour un prototypage rapide. Jina fait évoluer les choses et transforme les prototypes en services en production. Dans cet esprit, Jina AI a publié DocArray 0.1 en parallèle avec Jina 3.0 au début de 2022, indépendamment en tant que nouveau projet open source.
Nous avons choisi le nom DocArray parce que nous voulons créer quelque chose d’aussi fondamental et largement utilisé que NumPy ndarray
. Aujourd’hui, DocArray est le point d’entrée de nombreuses applications d’IA multimodales, comme les populaires DALLE-Flow et DiscoArt. Les développeurs de DocArray ont introduit de nouvelles fonctionnalités puissantes, telles que les classes de données et le magasin de documents pour améliorer encore plus la convivialité. DocArray s’est allié à des partenaires open source tels que Weaviate, Qdrant, Redis, FastAPI, pydantic et Jupyter pour l’intégration et surtout pour rechercher une norme commune.
Dans DocArray 0.19 (publié le 15 novembre), vous pouvez facilement représenter et traiter des données de maillage 3D.
(Jina AI, CC BY-SA 4.0)
L’avenir de DocArray
Faire don de DocArray à la Fondation Linux marque une étape importante où nous partageons notre engagement avec la communauté open source de manière ouverte, inclusive et constructive.
La prochaine version de DocArray se concentre sur quatre tâches :
• Représentant : prend en charge les idiomes Python pour représenter facilement des données multimodales complexes et imbriquées.
• Intégration : fournir des interfaces fluides pour les modèles d’apprentissage en profondeur traditionnels afin d’intégrer efficacement les données.
• Stockage : prend en charge plusieurs bases de données vectorielles pour une persistance efficace et une récupération approximative du voisin le plus proche.
• Transit : permettre une (dé)sérialisation rapide et devenir un protocole filaire standard sur gRPC, HTTP et WebSockets.
Dans les sections suivantes, les mainteneurs de DocArray, Sami Jaghouar et Johannes Messner, vous donnent un avant-goût de la prochaine version.
Classe de données tout-en-un
Dans DocArray, dataclass est une API de haut niveau pour représenter un document multimodal. Il suit la conception et l’idiome de la classe de données Python standard, permettant aux utilisateurs de représenter intuitivement des documents multimodaux complexes et de les traiter facilement avec l’API de DocArray. La nouvelle version fait de dataclass un citoyen de première classe et refactorise son ancienne implémentation en utilisant pydantic V2.
Comment utiliser la classe de données
Voici comment utiliser la nouvelle dataclass. Tout d’abord, vous devez savoir qu’un Document
est un modèle pydantic avec un ID aléatoire et l’interface Protobuf :
From docarray import Document
Pour créer votre propre type de données multimodal, il vous suffit de sous-classer à partir de Document
:
from docarray import Document
from docarray.typing import Tensor
import numpy as np
class Banner(Document):
alt_text: str
image: Tensor
banner = Banner(text='DocArray is amazing', image=np.zeros((3, 224, 224)))
Une fois que vous avez défini un Banner
vous pouvez l’utiliser comme bloc de construction pour représenter des données plus complexes :
class BlogPost(Document):
title: str
excerpt: str
banner: Banner
tags: List[str]
content: str
Ajout d’un champ d’intégration à BlogPost
est facile. Vous pouvez utiliser les paramètres prédéfinis Document
des modèles Text
et Image
qui sont fournis avec le champ d’intégration intégré :
from typing import Optional
from docarray.typing import Embedding
class Image(Document):
src: str
embedding: Optional[Embedding]
class Text(Document):
content: str
embedding: Optional[Embedding]
Ensuite, vous pouvez représenter votre BlogPost
:
class Banner(Document):
alt_text: str
image: Image
class BlogPost(Document):
title: Text
excerpt: Text
banner: Banner
tags: List[str]
content: Text
Cela donne à votre multimodal BlogPost
quatre représentations enchâssées : title
, excerpt
, content
et banner
.
Soutien Milvus
Milvus est une base de données vectorielles open-source et un projet open-source hébergé sous Linux Foundation AI & Data. Il est très flexible, fiable et extrêmement rapide, et prend en charge l’ajout, la suppression, la mise à jour et la recherche en temps quasi réel de vecteurs à l’échelle d’un billion d’octets. Comme première étape vers un DocArray plus inclusif, le développeur Johannes Messner a mis en œuvre l’intégration de Milvus.
Comme avec d’autres magasins de documents, vous pouvez facilement instancier un DocumentArray
avec stockage Milvus :
from docarray import DocumentArray
da = DocumentArray(storage='milvus', config={'n_dim': 10})
Ici, config
est la configuration de la nouvelle collection Milvus, et n_dim
est un champ obligatoire qui spécifie la dimensionnalité des représentations vectorielles continues stockées. Le code ci-dessous montre un exemple de travail minimum avec un serveur Milvus en cours d’exécution sur localhost :
import numpy as np
from docarray import DocumentArray
N, D = 5, 128
da = DocumentArray.empty(
N, storage='milvus', config={'n_dim': D, 'distance': 'IP'}
) # init
with da:
da.embeddings = np.random.random([N, D])
print(da.find(np.random.random(D), limit=10))
Pour accéder aux données persistantes d’un autre serveur, vous devez spécifier collection_name
, host
et port
. Cela permet aux utilisateurs de profiter de tous les avantages offerts par Milvus, grâce à l’API familière et unifiée de DocArray.
Adopter la gouvernance ouverte
Le terme « gouvernance ouverte » fait référence à la manière dont un projet est gouverné, c’est-à-dire comment les décisions sont prises, comment le projet est structuré et qui est responsable de quoi. Dans le contexte des logiciels open source, la “gouvernance ouverte” signifie que le projet est gouverné de manière ouverte et transparente, et que toute personne est invitée à participer à cette gouvernance.
La gouvernance ouverte pour DocArray présente de nombreux avantages :
• DocArray est maintenant géré démocratiquement, garantissant que chacun a son mot à dire.
• DocArray est désormais plus accessible et inclusif, car tout le monde peut participer à la gouvernance.
• DocArray sera de meilleure qualité, car les décisions sont prises de manière transparente et ouverte.
L’équipe de développement prend des mesures pour adopter la gouvernance ouverte, notamment :
• Création d’un comité de pilotage technique DocArray (TSC) pour aider à orienter le projet.
• Ouvrir le processus de développement à davantage d’apports et de commentaires de la part de la communauté.
• Rendre le développement de DocArray plus inclusif et accueillant pour les nouveaux contributeurs.
Rejoignez le projet
Si vous êtes intéressé par l’IA open source, Python ou le Big Data, vous êtes invité à suivre le projet DocArray au fur et à mesure de son développement. Si vous pensez que vous avez quelque chose à y apporter, alors rejoignez le projet. C’est une communauté en pleine croissance et ouverte à tous.
Cet article a été initialement publié sur le Blog sur l’IA de Jina et a été republié avec autorisation.