Yazarlar:
(1) Sasun Hambardzumyan, Activeloop, Mountain View, CA, ABD;
(2) Abhinav Tuli, Activeloop, Mountain View, CA, ABD;
(3) Levon Ghukasyan, Activeloop, Mountain View, CA, ABD;
(4) Fariz Rahman, Activeloop, Mountain View, CA, ABD;.
(5) Hrant Topchyan, Activeloop, Mountain View, CA, ABD;
(6) David Isayan, Activeloop, Mountain View, CA, ABD;
(7) Mark McQuade, Activeloop, Mountain View, CA, ABD;
(8) Mikayel Harutyunyan, Activeloop, Mountain View, CA, ABD;
(9) Tatevik Hakobyan, Activeloop, Mountain View, CA, ABD;
(10) Ivo Stranic, Activeloop, Mountain View, CA, ABD;
(11) Davit Buniatyan, Activeloop, Mountain View, CA, ABD.
Şekil 1'de gösterildiği gibi Deep Lake, ham verileri ve görünümleri S3 gibi nesne depolamada saklar ve veri kümelerini tam kökene sahip olarak gerçekleştirir. Akış, Tensör Sorgu Dili sorguları ve Görselleştirme motoru, harici yönetilen veya merkezi hizmet gerektirmeden, derin öğrenme işlemiyle birlikte veya tarayıcıda yürütülür.
4.1.1 Alıntı. Bazen meta veriler zaten ilişkisel bir veritabanında bulunabilir. Ayrıca Airbyte[3] [22] kullanarak bir ETL hedef konektörü oluşturduk. Çerçeve, SQL/NoSQL veritabanları, veri gölleri veya veri ambarları da dahil olmak üzere desteklenen herhangi bir veri kaynağına bağlanmaya ve verileri Deep Lake ile senkronize etmeye olanak tanır. Bağlayıcı protokolü, verileri sütunlu bir formata dönüştürür.
4.1.2 Dönüşüm. Veri işleme iş akışlarını önemli ölçüde hızlandırmak ve kullanıcıları yığın düzeni konusunda endişelenmekten kurtarmak için Deep Lake, python dönüşümlerini paralel olarak yürütme seçeneği sunar. Dönüşüm bir veri kümesini alır, ilk boyut boyunca örnek bazında yinelenir ve yeni bir veri kümesinin çıktısını verir. Kullanıcı tanımlı bir python işlevi iki gerekli argüman bekler: 𝑠𝑎𝑚𝑝𝑙𝑒_𝑖𝑛, 𝑠𝑎𝑚𝑝𝑙𝑒_𝑜𝑢𝑡 ve @𝑑𝑒𝑒𝑝𝑙𝑎𝑘𝑒 ile dekore edilmiştir. 𝑐𝑜𝑚𝑝𝑢𝑡𝑒. Tek bir 𝑠𝑎𝑚𝑝𝑙𝑒_𝑖𝑛, dinamik olarak birden fazla 𝑠𝑎𝑚𝑝𝑙𝑒_𝑜𝑢𝑡𝑠 oluşturabilir. Hem bire bir hem de bire çok dönüşümlere olanak sağlar. Dönüşüm, yeni bir veri kümesi oluşturulmadan da yerinde uygulanabilir.
Perde arkasında, zamanlayıcı, yakındaki parçalar üzerinde çalışan örnek bazında dönüşümleri gruplandırır ve bunları bir süreç havuzunda planlar. İsteğe bağlı olarak hesaplama bir Ray kümesine devredilebilir [53]. Kullanıcı, bir giriş veri kümesi tanımlamak yerine, besleme iş akışları oluşturmak için özel nesnelere sahip isteğe bağlı bir yineleyici sağlayabilir. Kullanıcılar ayrıca birden fazla dönüşümü bir araya toplayabilir ve karmaşık işlem hatlarını tanımlayabilir.
Deep Lake aynı zamanda deneylerin tekrarlanabilirliği ve eksiksiz bir veri kökenine uygunluk ihtiyacını da ele alıyor. Veri kümesinin farklı sürümleri aynı depolama alanında alt dizinlerle ayrılmış olarak bulunur. Her alt dizin, meta veri dosyalarıyla bağımsız bir veri kümesi görevi görür. Sürümlendirilmemiş bir veri kümesinden farklı olarak, bu alt dizinler, tüm değiştirilmiş parçaların adlarını içeren tensör başına karşılık gelen bir chunk_set ile birlikte yalnızca belirli bir sürümde değiştirilmiş parçaları içerir. Dizinin kökünde bulunan bir sürüm kontrol bilgi dosyası, dallanan bir sürüm kontrol ağacı olarak bu sürümler arasındaki ilişkiyi takip eder. Belirli bir versiyondaki tensörün herhangi bir parçasına erişirken, sürüm kontrol ağacı mevcut taahhütten başlayarak ilk işleme doğru ilerlenir. Geçiş sırasında, her sürümün parça kümesi, gerekli parçanın varlığı açısından kontrol edilir. Parça bulunursa geçiş durdurulur ve veriler alınır. Sürümler arasındaki farklılıkları takip etmek için her sürüm için tensör başına bir taahhüt diff dosyası da depolanır. Bu, sürümler ve dallar arasında karşılaştırma yapmayı daha hızlı hale getirir. Ayrıca, örneklerin kimlikleri veri kümesi popülasyonu sırasında oluşturulur ve saklanır. Bu, birleştirme işlemleri sırasında aynı örneklerin takip edilmesi açısından önemlidir. Deep Lake'in sürüm kontrol arayüzü, makine öğrenimi mühendislerinin, CLI'den ileri geri geçiş yapmadan veri işleme komut dosyalarındaki veri kümelerini sürümlendirmelerine olanak tanıyan Python API'sidir. Aşağıdaki komutları destekler:
• Commit : veri kümesinin mevcut durumunun değişmez bir anlık görüntüsünü oluşturur.
• Ödeme : mevcut bir şubeye/taahhüde teslim alır veya mevcut değilse yeni bir şube oluşturur.
• Diff : veri kümesinin 2 versiyonu arasındaki farkları karşılaştırır.
• Birleştir : kullanıcı tarafından tanımlanan politikaya göre çakışmaları çözerek veri kümesinin iki farklı versiyonunu birleştirir.
Veri görselleştirme, özellikle verilerin analitik olarak ayrıştırılmasının zor olduğu durumlarda makine öğrenimi iş akışlarının önemli bir parçasıdır. Hızlı ve kusursuz görselleştirme, daha hızlı veri toplamaya, açıklama eklemeye, kalite denetimine ve eğitim yinelemelerine olanak tanır. Deep Lake görselleştirici motoru, büyük ölçekli verileri doğrudan kaynaktan görselleştirmek için bir web arayüzü sağlar. Görselleştirme için en iyi düzeni belirlemek amacıyla tensörlerin tipini dikkate alır. Görüntü, video ve ses gibi birincil tensörler ilk olarak görüntülenirken metin, sınıf_etiketi, bbox ve ikili_mask gibi ikincil veriler ve ek açıklamalar üst üste bindirilir. Görselleştirici ayrıca, verilerin sıralı bir görünümünü sağlamak için sıra gibi meta türü bilgilerini de dikkate alır; burada sıralar oynatılabilir ve tüm verileri getirmeden sıranın belirli bir konumuna atlanabilir; bu, video veya ses kullanım durumlarıyla ilgilidir . Görselleştirici, makine öğrenimi iş akışlarındaki kritik ihtiyaçları karşılayarak kullanıcıların verileri anlamasına ve sorunlarını gidermesine, gelişimini göstermesine, tahminleri temel gerçeklerle karşılaştırmasına veya birden fazla görüntü dizisini (örneğin, kamera görüntüleri ve eşitsizlik haritaları) yan yana görüntülemesine olanak tanır.
Veri kümelerini sorgulamak ve dengelemek, derin öğrenme iş akışlarının eğitiminde yaygın bir adımdır. Tipik olarak bu, veri kümesini alt seçmek için örnekleme stratejileri veya ayrı ön işleme adımları kullanılarak bir veri yükleyicinin içinde gerçekleştirilir. Öte yandan, geleneksel veri gölleri harici analitik sorgu motorlarına [66] bağlanır ve Veri Çerçevelerini veri bilimi iş akışlarına aktarır. Format ile belirli verilere hızlı erişim arasındaki boşluğu gidermek için, C++'da uygulanan Tensor Sorgu Dili (TQL) adı verilen gömülü SQL benzeri bir sorgu motoru sağlıyoruz. Örnek bir sorgu Şekil 5'te gösterilmektedir. SQL ayrıştırıcı Hyrise'dan [37] Tensör Sorgu Dili tasarımına kadar genişletilirken, isteğe bağlı olarak hesaplamayı harici tensör hesaplama çerçevelerine devredebilen planlayıcımızı ve yürütme motorumuzu uyguladık. Sorgu planı tensör işlemlerinin hesaplamalı bir grafiğini oluşturur. Daha sonra zamanlayıcı sorgu grafiğini çalıştırır.
Sorgunun yürütülmesi, PyTorch [58] veya XLA [64] gibi harici tensör hesaplama çerçevelerine devredilebilir ve altta yatan hızlandırılmış donanımdan verimli bir şekilde faydalanılabilir. Standart SQL özelliklerine ek olarak TQL aynı zamanda sayısal hesaplamayı da uygular. Yeni bir sorgu dili uygulamanın iki ana nedeni vardır. Birincisi, geleneksel SQL, görüntü piksellerinin ortalamasını hesaplamak veya dizileri belirli bir boyuta yansıtmak gibi çok boyutlu dizi işlemlerini desteklemez. TQL, Python/NumPy tarzı indeksleme, dizilerin dilimlenmesi ve dizilerle çalışmak için birçoğu NumPy'de desteklenen yaygın işlemler olan geniş bir dizi kolaylık işlevi sağlayarak bu sorunu çözer. İkincisi, TQL, sorgunun Deep Lake'in sürüm kontrolü, akış motoru ve görselleştirme gibi diğer özellikleriyle daha derin entegrasyonunu sağlar. Örneğin TQL, belirli sürümlerdeki veya potansiyel olarak bir veri kümesinin birden çok sürümündeki verilerin sorgulanmasına olanak tanır. TQL ayrıca sorgu sonucunun görselleştirilmesini özelleştirmeye veya filtrelenmiş akış için veri yükleyiciyle kusursuz entegrasyona yönelik özel talimatları da destekler. Gömülü sorgu motoru, bir modeli uzak bir hesaplama örneğinde veya WebAssembly üzerinden derlenen tarayıcıda eğitirken istemciyle birlikte çalışır. TQL, SQL'i çok boyutlu sütunların üzerinde sayısal hesaplamalarla genişletir. Görselleştirilebilen veya doğrudan derin öğrenme çerçevelerine aktarılabilen veri kümelerinin görünümlerini oluşturur. Ancak sorgu görünümleri seyrek olabilir ve bu da akış performansını etkileyebilir.
Derin öğrenme için kullanılan ham verilerin çoğu, yerel olarak veya bulutta ham dosyalar (JPEG gibi formatlarda sıkıştırılmış) olarak depolanır. Veri kümeleri oluşturmanın yaygın bir yolu, bir veritabanındaki bu ham dosyalara yönelik işaretçileri korumak, gerekli veri alt kümesini almak için bunu sorgulamak, filtrelenen dosyaları bir makineye getirmek ve ardından dosyalar üzerinde yinelenen bir model eğitmektir. Ek olarak, veri kökeninin bir kaynak dosyasıyla manuel olarak bakımının yapılması gerekir. Tensör Depolama Formatı, bağlantılı tensörleri kullanarak bu adımları basitleştirir - orijinal verilere yönelik işaretçileri (bir veya daha fazla bulut sağlayıcısına bağlantılar/url'ler) saklar. Tek bir tensör içindeki işaretçiler birden fazla depolama sağlayıcısına bağlanabilir, böylece kullanıcıların birden fazla kaynakta bulunan verilerinin birleştirilmiş bir görünümünü elde etmelerine olanak sağlanır. Sorgular, sürüm kontrolü ve derin öğrenme çerçevelerine akış dahil olmak üzere Deep Lake'in tüm özellikleri bağlantılı tensörlerle kullanılabilir. Ancak veri akışının performansı, varsayılan tensörler kadar optimum olmayacaktır. Benzer bir sorun, yığın düzeni nedeniyle verimsiz bir şekilde aktarılan sorgular nedeniyle oluşturulan seyrek görünümlerde de mevcuttur. Ayrıca, materyalleştirme, veri kümesi görünümünü, daha hızlı yineleme için derin öğrenme çerçevelerine aktarılacak en uygun düzene dönüştürür. Gerçekleştirme, gerçek verilerin bağlantılardan veya görünümlerden alınmasını ve bunları verimli bir şekilde parçalara ayırmayı içerir. Makine öğrenimi iş akışlarının sonuna doğru bu adımı gerçekleştirmek, tam veri kökeniyle optimum akış performansı ve minimum veri çoğaltmasını sağlarken minimum veri çoğaltmasına yol açar.
Veri kümeleri büyüdükçe, uzaktan dağıtılan bir depolama alanından ağ üzerinden depolama ve aktarım kaçınılmaz hale geliyor. Veri akışı, tüm verilerin yerel bir makineye kopyalanmasını beklemeden eğitim modellerine olanak tanır. Akış veri yükleyicisi, veri getirmeyi, sıkıştırmayı açmayı, dönüşümleri uygulamayı, harmanlamayı ve eğitim modeline veri aktarımını sağlar. Derin öğrenme veri yükleyicileri, eşzamanlı hesaplamayı önlemek için genellikle getirme ve dönüştürme işlemlerini paralel çalışan işlemlere devreder. Daha sonra veriler, bellek kopyası ek yükü getiren veya bazı güvenilirlik sorunlarıyla paylaşılan belleği kullanan süreçler arası iletişim (IPC) aracılığıyla ana çalışana aktarılır. Bunun aksine, Deep Lake veri yükleyicisi, genel yorumlayıcı kilitlenmesini önlemek için C++'ta işlem başına yüksek derecede paralel getirme ve yerinde sıkıştırmayı açma işlemlerini devreder. Daha sonra, bellek içi işaretçiyi kullanıcı tanımlı dönüştürme işlevine iletir ve bunları derin öğrenme yerel bellek düzenindeki eğitim döngüsüne maruz bırakmadan önce harmanlar. Dönüşüm, yalnızca yerel kitaplık rutin çağrılarını kullandığında ve buna göre python küresel yorumlayıcı kilidini (GIL) serbest bıraktığında eşzamanlı olarak paralel olarak yürütülür. Sonuç olarak şunu elde ederiz:
• Performans : GPU'nun tamamen kullanılmasına veya işlem tarafından darboğaz oluşmasına neden olacak şekilde verileri derin öğrenme modeline yeterince hızlı iletmek.
• Akıllı Zamanlayıcı : CPU yoğun işlerin önceliklendirilmesi ile daha az yoğun işlerin önceliklendirilmesi arasında dinamik olarak ayrım yapar.
• Verimli Kaynak Tahsisi : Belleğin aşırı doldurulması nedeniyle eğitim sürecinin kesintiye uğramasını önlemek için bellek tüketimini tahmin etme.
Bu makale arxiv'de CC 4.0 lisansı altında mevcuttur .
[3] Kaynak kodu mevcut: https://github.com/activeloopai/airbyte @feature/connector/deeplake şubesinde