DataChain은 인공 지능을 위해 설계된 현대적인 Pythonic 데이터 프레임 라이브러리입니다. 구조화되지 않은 데이터를 데이터 세트로 구성하고 로컬 시스템에서 대규모로 랭글링하도록 만들어졌습니다. 데이터체인은 AI 모델과 API 호출을 추상화하거나 숨기지 않지만 이를 포스트모던 데이터 스택에 통합하는 데 도움을 줍니다.
진실의 소스로서의 스토리지.
S3, GCP, Azure 및 로컬 파일 시스템의 중복 복사본 없이 구조화되지 않은 데이터를 처리합니다.
다중 모드 데이터 지원: 이미지, 비디오, 텍스트, PDF, JSON, CSV, 쪽모이 세공 마루.
파일과 메타데이터를 버전이 지정된 영구 열 데이터 세트로 통합합니다.
Python 친화적인 데이터 파이프라인.
Python 개체 및 개체 필드에 대해 작업합니다.
SQL 또는 Spark 없이 내장된 병렬화 및 메모리 부족 컴퓨팅.
데이터 강화 및 처리.
로컬 AI 모델 및 LLM API를 사용하여 메타데이터를 생성합니다.
메타데이터별로 필터링, 조인 및 그룹화합니다. 벡터 임베딩으로 검색하세요.
데이터 세트를 Pytorch 및 Tensorflow에 전달하거나 다시 스토리지로 내보냅니다.
능률.
병렬화, 메모리 부족 워크로드 및 데이터 캐싱.
Python 개체 필드에 대한 벡터화된 작업: 합계, 개수, 평균 등
최적화된 벡터 검색.
$ pip 설치 데이터체인
저장소는 고양이와 개 이미지(dog.1048.jpg, cat.1009.jpg)로 구성되며, 'json-pairs' 형식의 정답 및 모델 추론으로 주석이 추가됩니다. 여기서 각 이미지에는 고양이와 같은 일치하는 JSON 파일이 있습니다. 1009.json:
{"class": "cat", "id": "1009", "num_annotators": 8,"inference": {"class": "dog", "confidence": 0.68} }
JSON 메타데이터를 사용하여 "신뢰도가 높은 고양이" 추론 이미지만 다운로드하는 예:
from datachain 가져오기 열, DataChainmeta = DataChain.from_json("gs://datachain-demo/dogs-and-cats/*json", object_name="meta")images = DataChain.from_storage("gs://datachain-demo /dogs-and-cats/*jpg")images_id = Images.map(id=lambda 파일: file.path.split('.')[-2])annotated = Images_id.merge(meta, on="id", right_on="meta.id")like_cats = annotated.filter((Column("meta.inference) .자신감") > 0.93) & (Column("meta.inference.class_") == "cat"))like_cats.export_files("high-confidence-cats/", signal="file")
변환기 라이브러리를 사용하는 간단한 감정 모델을 사용한 일괄 추론:
pip 설치 변압기
아래 코드는 클라우드에서 파일을 다운로드하고 각 파일에 사용자 정의 함수를 적용합니다. 긍정적인 감정이 감지된 모든 파일은 로컬 디렉터리에 복사됩니다.
변환기 가져오기 파이프라인에서 데이터체인 가져오기 DataChain, Columnclassifier = 파이프라인("감정-분석", device="cpu",model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")def is_긍정적_dialogue_ending(파일) - > bool:dialogue_ending = file.read()[-512:]반환 분류자(dialogue_ending)[0]["label"] == "긍정적"체인 = ( DataChain.from_storage("gs://datachain-demo/chatbot-KiT/", object_name="file", type="text") .settings(병렬=8, 캐시=True) .map(is_긍정적=is_긍정적_dialogue_ending) .save("파일_응답") )긍정적인_체인 = chain.filter(Column("is_긍정적") == True)긍정적_체인.export_files("./output")print(f"{긍정적_체인.count()} 파일을 내보냈습니다.")
13개 파일을 내보냈습니다.
$ ls 출력/datachain-demo/chatbot-KiT/ 15.txt 20.txt 24.txt 27.txt 28.txt 29.txt 33.txt 37.txt 38.txt 43.txt ... $ ls 출력/datachain-demo/chatbot-KiT/ | 화장실 -l 13
LLM은 범용 분류자로 작동할 수 있습니다. 아래 예에서는 공개적으로 사용 가능한 챗봇 대화를 판단하기 위해 Mistral의 무료 API를 사용합니다. https://console.mistral.ai에서 무료 Mistral API 키를 받으세요.
$ pip install mistralai (버전 >=1.0.0 필요) $ MISTRAL_API_KEY=_your_key_ 내보내기
DataChain은 API 호출을 병렬화할 수 있습니다. 무료 Mistral 계층은 동시에 최대 4개의 요청을 지원합니다.
from mistralai import Mistralfrom datachain import File, DataChain, ColumnPROMPT = "이 대화 상자가 성공했습니까? 한 단어로 대답하십시오: 성공 또는 실패."def eval_dialogue(file: File) -> bool: client = Mistral() response = client.chat .complete( model="open-mixtral-8x22b", message=[{"role": "system", "content": PROMPT}, {"role": "user", "content": file.read()}]) result = response.choices[0].message.content return result.lower().startswith("success")chain = ( DataChain .from_storage("gs://datachain-demo/chatbot-KiT/", object_name="파일") .settings(병렬=4, 캐시=True) .map(is_success=eval_dialogue) .save("mistral_files") )successful_chain = chain.filter(Column("is_success") == True)successful_chain.export_files("./output_mistral")print(f"{successful_chain.count()} 파일을 내보냈습니다.")
위의 지침을 통해 Mistral 모델은 성공적인 대화를 보유하기 위해 31/50 파일을 고려합니다.
$ ls 출력_mistral/datachain-demo/chatbot-KiT/ 1.txt 15.txt 18.txt 2.txt 22.txt 25.txt 28.txt 33.txt 37.txt 4.txt 41.txt ... $ ls 출력_mistral/datachain-demo/chatbot-KiT/ | 화장실 -l 31
LLM 응답에는 사용된 토큰 수, 모델 성능 매개변수 등 분석을 위한 귀중한 정보가 포함될 수 있습니다.
Mistral 응답 데이터 구조(ChatCompletionResponse 클래스)에서 이 정보를 추출하는 대신 DataChain은 전체 LLM 응답을 내부 DB에 직렬화할 수 있습니다.
from mistralai import Mistralfrom mistralai.models import ChatCompletionResponsefrom datachain import File, DataChain, ColumnPROMPT = "이 대화 상자가 성공했습니까? 한 단어로 대답하십시오: 성공 또는 실패."def eval_dialog(file: File) -> ChatCompletionResponse: client = MistralClient() return client.chat( model="open-mixtral-8x22b", message=[{"role": "system", "content": 즉각적인}, {"역할": "사용자", "콘텐츠": file.read()}])chain = ( DataChain.from_storage("gs://datachain-demo/chatbot-KiT/", object_name="file") .settings(병렬=4, 캐시=True) .map(응답=eval_dialog) .map(상태=람다 응답: response.choices[0].message.content.lower()[:7]) .save("응답") )chain.select("file.name", "status", "response.usage").show(5)success_rate = chain.filter(Column("status") == "success").count() / 체인 .count()print(f"{100*success_rate:.1f}% 대화 상자가 성공했습니다.")
산출:
파일 상태 응답 응답 응답 이름 사용법 사용법 사용법 프롬프트_토큰 총 토큰 완료_토큰 0 1.txt 성공 547 548 1 1 10.txt 실패 3576 3578 2 2 11.txt 실패 626 628 2 3 12.txt 실패 1144 1182 38 4 13.txt 성공 1100 1101 1 [5줄로 제한] 64.0%의 대화가 성공했습니다.
이전 예에서 데이터세트는 내장된 데이터베이스(작업 디렉터리의 .datachain 폴더에 있는 SQLite)에 저장되었습니다. 이러한 데이터 세트는 자동으로 버전이 지정되었으며 DataChain.from_dataset("dataset_name")을 사용하여 액세스할 수 있습니다.
저장된 데이터 세트를 검색하고 객체를 반복하는 방법은 다음과 같습니다.
chain = DataChain.from_dataset("response")# 하나씩 반복: 파일에 대한 메모리 부족 워크플로 지원, chain.limit(5).collect("file", "response")의 응답:# 확인 수집된 Python 객체assert isinstance(response, ChatCompletionResponse)status = response.choices[0].message.content[:7]tokens = response.usage.total_tokensprint(f"{file.get_uri()}: {status}, 파일 크기: {file.size}, 토큰: {tokens}")
산출:
gs://datachain-demo/chatbot-KiT/1.txt: 성공, 파일 크기: 1776, 토큰: 548 gs://datachain-demo/chatbot-KiT/10.txt: 실패, 파일 크기: 11576, 토큰: 3578 gs://datachain-demo/chatbot-KiT/11.txt: 실패, 파일 크기: 2045, 토큰: 628 gs://datachain-demo/chatbot-KiT/12.txt: 실패, 파일 크기: 3833, 토큰: 1207 gs://datachain-demo/chatbot-KiT/13.txt: 성공, 파일 크기: 3657, 토큰: 1101
일부 작업은 역직렬화 없이 DB 내부에서 실행될 수 있습니다. 예를 들어, Mixtral 호출 비용이 100만 입력 토큰당 $2, 100만 출력 토큰당 $6라고 가정하고 LLM API 사용에 대한 총 비용을 계산해 보겠습니다.
chain = DataChain.from_dataset("mistral_dataset")cost = chain.sum("response.usage.prompt_tokens")*0.000002 + chain.sum("response.usage.completion_tokens")*0.000006print(f"{chain.count()} 호출에 ${cost:.2f} 지출")
산출:
통화 50회에 $0.08 지출
체인 결과를 내보내거나 PyTorch 데이터로더로 직접 전달할 수 있습니다. 예를 들어, 파일 이름 접미사를 기반으로 이미지와 레이블을 전달하려는 경우 다음 코드가 이를 수행합니다.
torch.utils.data에서 DataLoader 가져오기 변환기에서 CLIPProcessor 가져오기 데이터 체인 가져오기 C, DataChainprocessor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")chain = (DataChain.from_storage("gs://datachain-demo/dogs) -and-cats/", 유형="이미지") .map(label=람다 이름: name.split(".")[0], params=["file.name"]) .select("파일", "레이블").to_pytorch(transform=processor.image_processor,tokenizer=processor.tokenizer, ) )로더 = DataLoader(체인, 배치_크기=1)
시작하기
다중 모드(Colab에서 사용해 보세요)
LLM 평가(Colab에서 시도)
JSON 메타데이터 읽기(Colab에서 시도)
기여를 매우 환영합니다. 자세한 내용은 기여자 가이드를 참조하세요.
문서
문제가 발생하면 문제를 신고하세요.
디스코드 채팅
이메일
지저귀다