Hub documentation
Veri Setlerini İşleme
Veri Setlerini İşleme
Veriler genellikle yapay zeka iş akışlarına uygun olmayan biçimlerde veritabanlarında veya bulut depolamada tutulur. Verileri Hub içine almak, bunları yapay zekaya hazır veri kümeleri olarak yayınlamanın iyi bir yoludur; bu sayede veri yükleme, işleme ve model eğitimi ile değerlendirme kolay ve verimli hale gelir.
huggingface_hub kullanılarak
Veri almanın en basit yolu, veri dosyalarını huggingface_hub ile yüklemektir.
huggingface_hub Python kütüphanesi, Hub'a depolar oluşturma ve veri setleri yükleme dahil olmak üzere depoları yönetmenizi sağlayan zengin bir özellik seti sunar. Daha fazla bilgi için istemci kütüphanesinin belgelerine göz atın.
Verileriniz statik/donmuşsa ve Hub tarafından desteklenen bir formatta (ör. Parquet veya JSON Lines) kullanılabilir bir yapıya (ör. eğitim ve değerlendirme için iyi tanımlanmış alanlar) sahip yerel bir veri dökümünü kolayca elde edebiliyorsanız bu durum geçerlidir.
dlt kullanımı
dlt, veri taşıma (ETL) için açık kaynaklı bir Python kütüphanesidir ve veri boru hatları geliştiren geliştiriciler (ve onların ajanları) için faydalıdır. Çeşitli kaynak türlerinden veri alabilir:
- Bulut depolama veya dosyalar
- REST API'leri
- SQL veritabanları
- Python üreteçleri
Kaynak türü örnekleri:
filesystem(s3, gs, az, abff vb. içerir)sql_database,mongodb,google_sheetsnotion,hubspot,rest_api
kaynaklar listesinden kaynak türünüzü bulun ve dlt projenizi oluşturun:
dlt init <source-type> filesystemArdından, dlt projenizin kökünde bir yapılandırma dosyası oluşturabilir ve hf:// protokolüne dayalı olarak Hub'u veri setleriniz için bir dosya sistemi hedefi olarak tanımlayabilirsiniz: .dlt/secrets.toml
[destination.filesystem]
bucket_url = "hf://datasets/<namespace>"
[destination.filesystem.credentials]
hf_token = "hf_..." # Your Hugging Face Access TokenAd alanı, veri setinizi almak istediğiniz kullanıcı adınız veya organizasyonunuzun/takımınızın adı olmalıdır.
Ardından her dlt veri seti, bir Hugging Face veri seti deposu oluşturur veya günceller. Depo adı <namespace>/<dataset_name> biçimindedir; burada <namespace>, bucket_url'de kullandığınızla aynıdır (kuruluşunuz veya ekibiniz) ve <dataset_name>, hattın dataset_name değeridir.
İşte örnek bir pipeline:
import dlt
@dlt.resource
def my_data():
# One of the functions auto-generated by `dlt init` that you can customize,
# or you can define your own python generator function.
# Here is an example from the `chess` source type:
for player in ['magnuscarlsen', 'rpragchess']:
response = requests.get(f'https://api.chess.com/pub/player/{player}')
response.raise_for_status()
yield response.json()
# Requires bucket_url = "hf://datasets/<namespace>" in .dlt/secrets.toml
pipeline = dlt.pipeline(
pipeline_name="my_pipeline",
destination="filesystem",
dataset_name="dataset_name",
)
pipeline.run(my_data())İstediğiniz verileri yüklemek ve veri setinizde yayınlamak istediğiniz alanları (ör. eğitim ve değerlendirme için ihtiyaç duyduğunuz metin) ayrıştırmak için dlt kaynağını özelleştirin.
Diğer kütüphaneleri kullanma
🤗 Datasets, Pandas, Polars, Dask, DuckDB, Spark veya Daft gibi bazı kütüphaneler, veriyi çeşitli kaynaklardan Hub'a aktarabilir. Daha fazla bilgi için Datasets Hub tarafından desteklenen kütüphaneler listesine bakın.
Ham verileri içe aktar
Yayınlanmadan önce ek kürasyon gerektiren ham verileri AI-uygun veri kümeleri olarak yayınlamak istiyorsanız veya S3 benzeri bir deneyime ihtiyacınız varsa, bunları Hugging Face Storage Buckets içine aktarmayı düşünün. Yerel diskten veya başka bir buluttan büyük bir mevcut koleksiyonu bir kovaya taşımak için Migration Guide'a bakın.
Verileriniz zaten bir veri seti, model veya Space deposunda bulunuyorsa, hf buckets cp ile bir kovaya sunucu tarafında kopyalayabilirsiniz — indirme veya yeniden yükleme gerekmez:
hf cp hf://datasets/username/my-dataset/ hf://buckets/username/my-bucket/Yalnızca Xet içerik özetleri (hash) taşınır, bu nedenle çok büyük dosyalar bile anında kopyalanır. Depolar ve varlıklar (bucket) arasında dosya kopyalama bölümüne bakın.
Zamanlanmış veri alımı
Hub'da aynı dosyayı binlerce kez güncellerken bazı kısıtlamalar vardır. Örneğin, çalışan bir LLM çıkarım sunucusunun nesillerini, canlı ajan izlerini veya çalışan bir model eğitiminin günlüklerini içe aktarmak isteyebilirsiniz. Bu tür durumlarda, verileri Hub'da bir veri seti olarak yüklemek mantıklıdır, ancak bunu doğru yapmak zor olabilir. Ana neden, verilerinizin her güncellemesini sürümlemek istememenizdir; çünkü bu, git deposunu kullanılamaz hale getirir.
Üç seçenek mevcuttur:
- Bir Dataset deposu yerine Storage Bucket kullanın: Storage Buckets, git tabanlı olmadıkları için dosyaların çok sık güncellenmesine olanak tanıyan S3 benzeri bir deneyim sunar. Storage Buckets, bir dataset olarak yayımlanmaya hazır olmayan veriler için özellikle faydalıdır; örneğin hâlâ gelişen veya daha fazla kürasyon gerektiren veriler.
- CommitScheduler kullanın:
huggingface_hubiçindekiCommitScheduler, bir Dataset deposunun git geçmişini yönetilebilir tutmak için neredeyse gerçek zamanlı veri alımı sunar. Dakika cinsinden tanımlanan aralıklarla git commit'leri yapacak şekilde yapılandırılabilir. - Hugging Face Jobs ile veri alma betiklerini zamanlayın: Hugging Face Jobs, Python betiklerini Hugging Face altyapısında çalıştırmanın ve zamanlamanın bir yolunu sunar. Veri alma betiklerini, Cron sözdizimi kullanılarak tanımlanan aralıklarla çalışacak şekilde zamanlayın.
Depolama Kovalarını Kullanarak Yüksek Sıklık
Git tabanlı Dataset depolarının aksine, Storage Buckets üzerindeki dosyaları çok yüksek bir hızda güncelleyebilir, bu da neredeyse gerçek zamanlı veri alımını mümkün kılar.
Bir kovadaki dosyaları güncellemek için huggingface_hub içindeki batch_bucket_files() işlevini kullanın:
from huggingface_hub import batch_bucket_files
def update_bucket(local_files):
destinations = [os.path.basename(local_file) for local_file in local_file]
batch_bucket_files(bucket_id="username/bucket_name", add=[(local_file, dst) for local_file, dst in zip(local_files, destinations)])Alternatif olarak, bir Bucket içindeki dosyalara ekleyebilir ve her yeni öğede flush() çağırabilirsiniz:
from huggingface_hub import hffs
with hffs.open("buckets/username/bucket_name/texts.jsonl", "a") as f:
for text in live_texts_stream:
f.write(json.dumps({"text": text}) + "\n")
f.flush()HfFileSystem, varsayılan blok boyutu 5MiB olan fsspec üzerine kuruludur; bu da, 5MiB'lık yeni bir veri parçası eklendiğinde verilerin aslında yüklendiği anlamına gelir.
Daha sık yükleme yapmak istiyorsanız, hffs.open() içindeki blocksize değerini düşürün (ör. 100 kiB için hffs.open(..., blocksize=100 * 2 ** 10)) veya f.flush(force=True) kullanın.
Hugging Face depolama, dosyalara eklerken verimli girdi/çıkış (I/O) imkânı sunan Xet tabanlıdır: yüklemeler benzersizleştirilir ve yalnızca yeni veriler yüklenir. Kovalarda dinamik veri alımı hakkında daha fazla bilgi için yükleme konusundaki kova belgelerine ve veri seti düzenleme belgelerine bakın.
CommitScheduler ile neredeyse gerçek zamanlı
Fikir, yerel bir klasörü Hub'a düzenli olarak gönderen arka plan işi çalıştırmaktır. Verileri Hub'a kaydetmek istiyorsunuz (potansiyel olarak milyonlarca kayıt), ancak her kullanıcının girdisini gerçek zamanlı olarak kaydetmenize gerek yok. Bunun yerine, verileri yerel bir JSON dosyasında kaydedip her 10 dakikada bir yükleyebilirsiniz. Örneğin:
import json
from huggingface_hub import CommitScheduler
folder_path = "path/to/files/to/ingest"
every = 10 # ingest every 10min
with CommitScheduler(repo_id="username/dataset_name", repo_type="dataset", folder_path=folder_path, every=every) as scheduler:
# Write to the folder to ingest every 10min
# For example:
with open(folder_path + "/texts.jsonl", "a") as f:
f.write(json.dumps({"text": text}) + "\n")
...Her seferinde her şeyi yeniden yüklemek zorunda kalmadan dinamik verileri nasıl alacağınızı veri seti düzenleme belgelerinde inceleyin.
Zamanlanmış yüklemeler hakkında daha fazla bilgi için huggingface_hub belgelerine göz atın.
Hugging Face Jobs ile tabanlı
Verileri bir zamanlamaya göre içe aktarmak için Python betiklerini zamanla
Örneğin ingest.py betiğini her 5 dakikada bir çalıştırmak için:
hf jobs scheduled uv run "*/5 * * * *" ingest.pyBetik bağımlılıklarını betiğin başlığında belirtin veya --with kullanın.
Örneğin, bir dlt hattını her gün gece yarısında çalıştırmak için:
hf jobs scheduled uv run --with "dlt[hf]" "0 0 * * *" pipeline.pyHer çalıştırmanın günlüklerini hf jobs logs komutuyla veya Hugging Face'teki hesabınızda Jobs sayfasında doğrudan kontrol edebilirsiniz.
Hugging Face İşleri hakkında daha fazla bilgi için İşler belgelerini inceleyin.
Update on GitHub