Datasets documentation

Önbellek

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Önbellek

Önbellek, 🤗 Datasets'in bu kadar verimli olmasının nedenlerinden biridir. Daha önce indirilmiş ve işlenmiş veri setlerini saklar; bunları tekrar kullanmanız gerektiğinde doğrudan önbellekten yeniden yüklenir. Bu sayede bir veri setini baştan indirmek veya işleme fonksiyonlarını yeniden uygulamak gerekmez. Python oturumunu kapatıp yeni bir oturum başlattıktan sonra bile 🤗 Datasets, veri setinizi doğrudan önbellekten yeniden yükler!

Parmak izi

Önbellek, bir veri setine uygulanan dönüşümleri nasıl takip eder? 🤗 Datasets, önbellek dosyasına bir parmak izi atar. Parmak izi, bir veri setinin mevcut durumunu takip eder. Başlangıç parmak izi, Arrow tablosundan bir özet (hash) veya veri seti diskteyse Arrow dosyalarının özeti kullanılarak hesaplanır. Sonraki parmak izleri, önceki durumun parmak izi ile en son uygulanan dönüşümün özeti birleştirilerek hesaplanır.

Transforms, How-to Process kılavuzlarındaki Dataset.map() veya Dataset.shuffle() gibi işleme yöntemlerinden herhangi biridir.

İşte gerçek parmak izlerinin görünümü:

>>> from datasets import Dataset
>>> dataset1 = Dataset.from_dict({"a": [0, 1, 2]})
>>> dataset2 = dataset1.map(lambda x: {"a": x["a"] + 1})
>>> print(dataset1._fingerprint, dataset2._fingerprint)
d19493523d95e2dc 5b86abacd4b42434

Bir dönüştürmenin hashlenebilir olması için dill veya pickle ile picklenebilir (serileştirilebilir) olması gerekir.

Hash'lenemeyen bir dönüştürme (transform) kullandığınızda, 🤗 Datasets bunun yerine rastgele bir parmak izi (fingerprint) kullanır ve bir uyarı verir. Hash'lenemeyen dönüştürme, önceki dönüştürmelerden farklı olarak kabul edilir. Sonuç olarak 🤗 Datasets tüm dönüştürmeleri yeniden hesaplar. Bunu önlemek için dönüştürmelerinizin pickle veya dill ile serileştirilebilir (serializable) olduğundan emin olun!

🤗 Datasets'in her şeyi yeniden hesapladığı bir örnek, önbellekleştirmenin devre dışı bırakılmasıdır. Bu durumda, önbellek dosyaları her seferinde oluşturulur ve geçici bir dizine yazılır. Python oturumunuz sonlandığında, geçici dizindeki önbellek dosyaları silinir. Bu önbellek dosyalarına, bir parmak izi yerine rastgele bir hash atanır.

Önbellekleme devre dışı bırakıldığında, dönüştürülmüş veri setinizi Dataset.save_to_disk() ile kaydedin; aksi takdirde oturum sonlandığında silinir.

Hashing

Bir veri setinin parmak izi, map işlevine geçirilen fonksiyonun ve map parametrelerinin (batch_size, remove_columns vb.) özetlenmesiyle güncellenir.

Herhangi bir Python nesnesinin parmak izini fingerprint.Hasher kullanarak kontrol edebilirsiniz:

>>> from datasets.fingerprint import Hasher
>>> my_func = lambda example: {"length": len(example["text"])}
>>> print(Hasher.hash(my_func))
'3d35e2b3e94c81d6'

Hash, nesnenin dill pickler kullanılarak dökülmesi ve dökülen baytların hashlenmesiyle hesaplanır. Pickler, fonksiyonunuzda kullanılan tüm değişkenleri özyinelemeli olarak döker; bu nedenle fonksiyonunuzda kullanılan bir nesnede yaptığınız herhangi bir değişiklik, hash'in değişmesine neden olur.

Eğer fonksiyonlarınızdan birinin oturumlar arasında aynı hash değerine sahip görünmemesi, değişkenlerinden en az birinin deterministik olmayan bir Python nesnesi içerdiği anlamına gelir. Bu durumla karşılaştığınızda, hash değerinin neden değiştiğini bulmak için şüpheli bulduğunuz herhangi bir nesnenin hash değerini alabilirsiniz. Örneğin, elemanlarının sıralaması oturumlar arasında deterministik olmayan bir liste kullanıyorsanız, hash değeri de oturumlar arasında aynı olmayacaktır.

Update on GitHub