# Kütüphaneler

Datasets Hub, Açık Kaynak ekosistemindeki çeşitli kütüphaneler için destek sunar. [huggingface_hub Python kütüphanesi](/docs/huggingface_hub) sayesinde veri setlerinizi Hub üzerinde paylaşmayı etkinleştirmek kolaydır. Makine Öğrenmesini ileriye taşıyan bir dizi Açık Kaynak kütüphanesini Hub'a dahil etmekten memnuniyet duyuyoruz.

## Kütüphaneler tablosu

Aşağıdaki tablo, desteklenen kütüphaneleri ve entegrasyon düzeylerini özetler.

| Kütüphane                             | Açıklama                                                                                                                    | Hub'dan indir | Hub'dan akış | Hub'a Yükle | Hub'a Akıt | Optimize edilmiş Parquet dosyaları |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | --------------- | ----------- | ------------- | ----------------------- |
| [Argilla](./datasets-argilla)       | Yüksek kaliteli veriyi önemseden yapay zeka mühendisleri ve alan uzmanları için iş birliği aracı.                                           | ✅                | ❌              | ✅          | ❌            | ❌                      |
| [Daft](./datasets-daft)             | Python yerel arayüze sahip, büyük ölçekli ve çok modlu veri işleme için veri motoru.                                        | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [Dask](./datasets-dask)             | Mevcut Python ve PyData ekosistemini ölçeklendiren paralel ve dağıtık hesaplama kütüphanesi.                               | ✅                | ✅              | ✅          | ✅            | ✅*                     |
| [Veri Tasarımcısı](./datasets-data-designer) | LLM'ler kullanarak sentetik veri setleri üretmek için NVIDIA NeMo çerçevesi.                                                      | ✅                | ❌              | ✅          | ❌            | ❌                      |
| [Veri Setleri](./datasets-usage)        | 🤗 Datasets, Ses, Bilgisayarlı Görü ve Doğal Dil İşleme (NLP) için veri setlerine erişmek ve paylaşmak için kullanılan bir kütüphanedir. | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [Distilabel](./datasets-distilabel) | Sentetik veri üretimi ve yapay zeka geri bildirimi için çerçeve.                                                                   | ✅                | ❌              | ✅          | ❌            | ❌                      |
| [DuckDB](./datasets-duckdb)         | Süreç içi SQL OLAP veritabanı yönetim sistemi.                                                                                | ✅                | ✅              | ❌          | ❌            | ❌                      |
| [Gömme Atlası](./datasets-embedding-atlas) | Büyük gömme (embedding) kümeleri için etkileşimli görselleştirme ve keşif aracı.                                                 | ✅                | ✅              | ❌          | ❌            | ❌                      |
| [Fenic](./datasets-fenic)           | Üretim ortamında yapay zeka ve ajan tabanlı uygulamalar geliştirmek için PySpark'tan ilham alan bir DataFrame çerçevesi.                                      | ✅                | ✅              | ❌          | ❌            | ❌                      |
| [FiftyOne](./datasets-fiftyone)     | FiftyOne, görüntü, video ve 3B verilerinin kürasyonu ve görselleştirilmesi için bir kütüphanedir.                                             | ✅                | ✅              | ✅          | ❌            | ❌                      |
| [Lance](./datasets-lance)           | Çok modlu yapay zeka için açık bir göl evi (lakehouse) biçimi.                                                                                    | ✅                | ✅              | ❌          | ❌            | ❌                      |
| [Pandas](./datasets-pandas)         | Python veri analizi araç seti.                                                                                                  | ✅                | ❌              | ✅          | ❌            | ✅*                     |
| [Polars](./datasets-polars)         | Bir OLAP sorgu motorunun üzerine kurulu bir DataFrame kütüphanesi.                                                                            | ✅                | ✅              | ✅          | ❌            | ❌                      |
| [PyArrow](./datasets-pyarrow)       | Apache Arrow, hızlı veri değişimi ve bellek içi analitik için bir sütun tabanlı biçim ve araç kutusudur.                             | ✅                | ✅              | ✅          | ❌            | ✅*                     |
| [Spark](./datasets-spark)           | Dağıtık bir ortamda gerçek zamanlı, büyük ölçekli veri işleme aracı.                                                      | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [WebDataset](./datasets-webdataset) | Büyük veri kümeleri için G/Ç (Giriş/Çıkış) boru hatları yazmak için kütüphane.                                                                             | ✅                | ✅              | ❌          | ❌            | ❌                      |

_ * Optimize edilmiş Parquet dosyaları yazmak için ek argümanların geçirilmesi gerekir_

## Veri İşleme Kütüphaneleri

### Akış

Dataset streaming, bir veri setini Hugging Face'ten tamamen indirmeden kademeli olarak işlemeye olanak tanır. Veri asla diske yazılmadığı için yerel disk alanı tasarrufu sağlar. Bir anda veri setinin yalnızca küçük bir bölümü kullanıldığı için bellek tasarrufu sağlar. CPU veya GPU iş yükünden önce veri indirme gereksinimi olmadığı için de zaman tasarrufu sağlar.

Hugging Face'ten *akış* dışında, birçok kütüphane Hugging Face'e *geri akış* desteği de sunar. Bu sayede uçtan uca akış hatları çalıştırılabilir: bir kaynaktan akış alarak Hugging Face'e kademeli olarak yazarlar; bu sırada indirme, yükleme ve işleme adımları genellikle üst üste biner.

Akış işleminin nasıl yapılacağına dair daha fazla ayrıntı için, akışı destekleyen bir kütüphanenin (yukarıdaki tabloya bakın) belgelerini inceleyin veya Hugging Face'ten veri kümelerini kendiniz akışa almak istiyorsanız [streaming datasets](./datasets-streaming) belgesine göz atın.

### Optimize edilmiş Parquet dosyaları

Hugging Face üzerindeki Parquet dosyaları, depolama verimliliğini artırmak, indirme ve yükleme işlemlerini hızlandırmak ve verimli veri seti akışını ve düzenlemeyi mümkün kılmak üzere optimize edilmiştir.

Optimize edilmiş Parquet dosyaları, ek özelliklere sahip Parquet dosyalarıdır:

* [Parquet İçerik Tanımlı Parçalama](https://huggingface.co/blog/parquet-cdc), Hugging Face'in depolama altyapısı olan [Xet](https://huggingface.co/docs/hub/en/xet/index) için Parquet'i optimize eder. Parça tabanlı kopya azaltma sayesinde yüklemeleri ve indirmeleri hızlandırır ve verimli dosya düzenlemeye olanak tanır
* Page index, akış sırasında filtreleri hızlandırır ve [Dataset Viewer](https://huggingface.co/docs/dataset-viewer) gibi durumlarda verimli rastgele erişim sağlar.

Bazı kütüphaneler, `Pandas` ve `PyArrow` gibi Optimize Edilmiş Parquet dosyaları yazmak için ek bir argüman gerektirir:

* Parquet İçerik Tanımlı Parçalama'yı etkinleştirmek için `use_content_defined_chunking=True`, [ayıklama](https://huggingface.co/blog/parquet-cdc) ve [düzenleme](./datasets-editing) için
* Parquet metaverisinde sayfa dizini içermek için `write_page_index=True`, [akış ve rastgele erişim](./datasets-streaming) için

## Eğitim Kütüphaneleri

Hub veri setleriyle model eğitimi için entegre olan eğitim kütüphaneleri. Aşağıdaki tablo, veri setlerini önceden indirmeden eğitim yapma yeteneği olan akış (streaming) özelliklerini göstermektedir.

| Kütüphane | Açıklama | Hub'dan akış |
| ------- | ----------- | --------------- |
| [Axolotl](https://docs.axolotl.ai/docs/streaming.html) | Düşük kodlu LLM ince ayar çerçevesi | ✅ |
| [LlamaFactory](https://github.com/hiyouga/LLaMA-Factory) | 100'den fazla LLM için birleşik ince ayar | ✅ |
| [Sentence Transformers](https://sbert.net/docs/sentence_transformer/training_overview.html) | Metin gömlemleri ve anlamsal benzerlik | ✅ |
| [Transformers](https://huggingface.co/docs/transformers/trainer) | 🤗 Transformers Trainer ile modelleri ince ayar yapmak | ✅ |
| [TRL](https://huggingface.co/docs/trl) | Pekiştirmeli öğrenme ile LLM'lerin eğitimi (SFT, DPO, GRPO) | ⚠️* |
| [Unsloth](https://docs.unsloth.ai) | Hızlı LLM ince ayarı (2x hızlanma, %70 daha az bellek) | ✅ |

_* SFTTrainer ve DPOTrainer akış işleme (streaming) destekler; GRPOTrainer henüz akış işleme girdisini desteklemez_

### Hub'dan Akış

Streaming, dev setlerini önceden indirmeden devasa veri kümeleri üzerinde eğitim yapmanıza olanak tanır. Bu, şu durumlarda değerlidir:
- Veri setiniz diske sığacak kadar büyük değil
- Hemen eğitim başlatmak istiyorsanız
- [HF Jobs](https://huggingface.co/docs/hub/jobs) kullanıyorsunuz; aynı konumda bulunan hesaplama birimleri daha hızlı akış sağlar

Yapılan son iyileştirmeler, daha hızlı başlatma, ön yükleme ve çok sayıda işçiye daha iyi ölçeklenme sayesinde akışın [100 kata kadar daha verimli](https://huggingface.co/blog/streaming-datasets) olmasını sağlamıştır.

**Not:** Veri seti uzunluğu bilinmediğinden, akış için eğitim argümanlarında `max_steps` gereklidir ve tampon tabanlı karıştırma kullanılır. Daha fazla ayrıntı için [akış veri setleri](./datasets-streaming) bölümüne bakın.

### Hub'a Kayıt

Bazı araçlar, eğitim sırasında eğitim verilerini Hub'a geri aktarabilir:

- **[Trackio](https://github.com/gradio-app/trackio)**: Eğitim metriklerini gerçek zamanlı olarak bir Hub veri setine aktarır

## Hub ile veri kütüphanelerini ve araçlarını entegre etme

Bu kılavuz, Hugging Face Hub ile entegrasyon yapmak isteyen veri kütüphanelerinin ve araçlarının geliştiricileri ile bakımcıları için tasarlanmıştır. Bir veri işleme kütüphanesi, analiz aracı veya veri setleriyle etkileşime girmesi gereken herhangi bir yazılım geliştiriyor olsanız bile, bu dokümantasyon size bir Hub entegrasyonu uygulamak konusunda yardımcı olacaktır.

Kılavuz şunları kapsar:

- Hub'dan verileri kütüphanenize/aracınıza yüklemek için olası yaklaşımlar
- Kitaplığınızdan/aracınızdan Hub'a veri yükleme için olası yaklaşımlar

### Hub'dan veri yükleme

Veriyle çalışmak için bir kütüphaneniz varsa, kullanıcılarınızın Hub'dan veri yüklemesi onlar için faydalı olabilir.

Genel olarak, kendi uygulamanızı yazmak için belirli bir nedeniniz olmadıkça bunu yapmak için `datasets`, `pandas` veya `polars` gibi mevcut bir kütüphaneye güvenmenizi öneririz. Yükleme süreci üzerinde daha fazla kontrol gerektiriyorsanız, örneğin bir depodan belirli bir dosya alt kümesini indirmenize olanak tanıyan `huggingface_hub` kütüphanesini kullanabilirsiniz.

Hub'dan veri yükleme hakkında daha fazla bilgiyi [burada](https://huggingface.co/docs/hub/datasets-downloading) bulabilirsiniz.

#### Veri Seti Görüntüleyici ve Parquet Dosyaları Üzerinden Entegrasyon

Hub'un veri seti görüntüleyicisi ve Parquet dönüştürme sistemi, veri setlerinin orijinal formatından bağımsız olarak onlarla entegre olmak için standart bir yöntem sağlar. Bu altyapı, Hub ile harici kütüphaneler arasında güvenilir bir entegrasyon katmanıdır.

Veri seti zaten Parquet formatında değilse, Hub, veri seti görüntüleyicisini çalıştırmak ve tutarlı erişim desenleri sağlamak için her veri setinin ilk 5 GB'ını otomatik olarak Parquet formatına dönüştürür. Bu standartlaştırma, kütüphane entegrasyonları için çeşitli avantajlar sunar:

- Orijinal biçimden bağımsız olarak tutarlı veri erişim kalıpları
- Hub'un veri seti görüntüleyicisi aracılığıyla yerleşik veri seti önizleme ve keşif. Veri seti görüntüleyicisi, zengin veri seti önizlemeleri sunmayı kolaylaştıran bir iframe olarak uygulamalarınıza da gömülebilir. Görüntüleyiciyi gömleme hakkında daha fazla bilgi için [veri seti görüntüleyicisi gömme belgelerini](https://huggingface.co/docs/hub/en/datasets-viewer-embed) inceleyin.
- Sorgulama için optimize edilmiş verimli sütun tabanlı depolama. Örneğin, belirli bir veri alt kümesini sorgulamak veya filtrelemek için [DuckDB](https://duckdb.org/) gibi bir araç kullanabilirsiniz.
- Parquet, makine öğrenimi ve veri bilimi ekosisteminde iyi desteklenmektedir.

Dataset Viewer API ile çalışma hakkında daha fazla ayrıntı için [Dataset Viewer API belgelerini](https://huggingface.co/docs/dataset-viewer/index) inceleyin.

### Verileri Hub'a yükleme

Bu bölüm, kütüphanenize Hub'a veri yükleme yeteneği ekleme konusunda olası yaklaşımları, yani `push_to_hub` metodunun nasıl uygulanacağını ele alır.

Bu kılavuz, verileri Hub'a yüklemenin üç temel yolunu ele alacaktır:

- `datasets` kütüphanesini ve `push_to_hub` yöntemini kullanarak
- Hub'a `pandas` kullanarak yazma
- `huggingface_hub` kütüphanesini ve `upload_folder` yöntemini kullanarak

#### `datasets` kütüphanesini kullanın

Hub'a veri göndermenin en doğrudan yolu, `datasets` kütüphanesindeki mevcut [`push_to_hub`](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.push_to_hub) yöntemine güvenmektir. `push_to_hub` yöntemi otomatik olarak şunları ele alır:

- deponun oluşturulması
- veri setinin Parquet'e dönüştürülmesi
- veri setini uygun parçalara ayırma
- verilerin yüklenmesi

Örneğin, sözlük listesini döndüren sentetik veri üretme kütüphaneniz varsa, aşağıdaki işlemi basitçe yapabilirsiniz:

```python
from datasets import Dataset

data = [{"prompt": "Write a cake recipe", "response": "Measure 1 cup ..."}]
ds = Dataset.from_list(data)
ds.push_to_hub("USERNAME_OR_ORG/repo_ID")
```

Bu tür entegrasyonun örnekleri:

- [Distilabel](https://github.com/argilla-io/distilabel/blob/8ad48387dfa4d7bd5639065661f1975dcb44c16a/src/distilabel/distiset.py#L77)

#### Hub ile mevcut bir kütüphane entegrasyonuna güvenin

Polars, Pandas, Dask, Spark, DuckDB ve Daft, hepsi bir Hugging Face Hub deposuna yazabilir. Daha fazla ayrıntı için yukarıdaki [Kütüphaneler tablosuna](#libraries-table) bakın.

Kodunuzda bu kütüphanelerden birini zaten kullanıyorsanız, Hub'a gönderme yeteneğini eklemek basittir. Örneğin, bir Pandas DataFrame döndürebilen sentetik veri üretimi kütüphaneniz varsa, Hub'a yazmak için yazmanız gereken kod şudur:

```python
from huggingface_hub import HfApi

# Initialize the Hub API
hf_api = HfApi()

# Create a repository (if it doesn't exist)
hf_api.create_repo(repo_id="username/my-dataset", repo_type="dataset", exist_ok=True)

# Convert your data to a DataFrame and save directly to the Hub
df.to_parquet("hf://datasets/username/my-dataset/data.parquet")
```

#### huggingface_hub Python kütüphanesini kullanarak

`huggingface_hub` Python kütüphanesi, Hub'a veri yüklemek için daha esnek bir yaklaşım sunar. Kütüphane, bir depoya belirli dosyaları veya dosya alt kümelerini yüklemenizi sağlar. Bu, Parquet'e dönüştürmek istemediğiniz büyük bir veri setiniz varsa, belirli bir dosya alt kümesini yüklemek istiyorsanız veya depo yapısı üzerinde daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.

Kullanım senaryonuza bağlı olarak, kodunuzun belirli bir noktasında bir dosya veya klasör yükleyebilirsiniz; örneğin, bir kullanıcı "Hub'a gönder" düğmesine tıkladığında bir araçtan Hub'a etiketleri dışa aktarabilirsiniz. Örneğin,

```python
from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path="/my-cool-library/data-folder",
    repo_id="username/my-dataset",
    repo_type="dataset",
    commit_message="Push annotations to Hub",
    allow_patterns="*.jsonl",
)
```

Hub'a veri yükleme yöntemleri hakkında daha fazla bilgiyi [burada](https://huggingface.co/docs/huggingface_hub/main/en/guides/upload) bulabilirsiniz.

Alternatif olarak, arka planda veri yüklemek isteyebileceğiniz durumlar vardır; örneğin, her 10 dakikada bir üretilen sentetik veriler. Bu durumda `huggingface_hub` kütüphanesinin `CommitScheduler` sınıfını kullanabilirsiniz. Daha fazla ayrıntı için [zamanlanmış yüklemeler belgelerini](https://huggingface.co/docs/huggingface_hub/main/en/guides/upload#scheduled-uploads) inceleyin.

Bu yaklaşımı kullanarak Hub'a veri yükleme örneğini

- [fastdata](https://github.com/AnswerDotAI/fastdata/blob/main/nbs/00_core.ipynb) kütüphanesi
- Bu [magpie](https://huggingface.co/spaces/davanstrien/magpie/blob/fc79672c740b8d3d098378dca37c0f191c208de0/app.py#L67) Demo Uzayı

## Daha fazla destek

Entegrasyonla ilgili teknik sorularınız için datasets@huggingface.co adresinden datasets ekibine ulaşabilirsiniz.

