Snowflake ve Dask kullanarak Makine Öğrenimi Ardışık Düzenleri Oluşturma
Bu yazıda, son zamanlarda keşfettiğim araçlardan bazılarını paylaşmak ve bunları nasıl kullandığımı ve iş akışımın verimliliğini artırmaya nasıl yardımcı olduklarını size göstermek istiyorum. Özellikle bahsedeceğim ikisi Snowflake ve Dask. Çok farklı iki araç, ancak özellikle Makine Öğrenimi Yaşam Döngüsünün bir parçası olarak birbirini iyi tamamlayan araçlar.
By daniel foley, Veri Bilimcisi
Giriş
Son zamanlarda bir veri bilimcisi olarak iş akışımı iyileştirmenin daha iyi yollarını bulmaya çalışıyorum. Zamanımın makul bir kısmını işimde ETL'leri modellemek ve inşa etmek için harcama eğilimindeyim. Bu, büyük veri kümelerini güvenilir ve verimli bir şekilde işlemek için araçlara giderek daha fazla güvenmem gerektiği anlamına geliyor. Bu veri kümelerini manipüle etmek için pandaları kullanmanın her zaman iyi bir yaklaşım olmadığını hemen fark ettim ve bu beni başka alternatifler aramaya sevk etti.
Bu yazıda, son zamanlarda keşfettiğim araçlardan bazılarını paylaşmak ve bunları nasıl kullandığımı ve iş akışımın verimliliğini artırmaya nasıl yardımcı olduklarını size göstermek istiyorum. Özellikle bahsedeceğim ikisi Snowflake ve Dask. Çok farklı iki araç, ancak özellikle Makine Öğrenimi Yaşam Döngüsünün bir parçası olarak birbirini iyi tamamlayan araçlar. Umudum, bu yazıyı okuduktan sonra Snowflake ve Dask'ın ne olduğunu, nasıl etkili bir şekilde kullanılabileceğini ve kendi kullanım durumlarınızla çalışmaya başlayabileceğinizi iyi bir şekilde anlayacağınızdır.
Daha spesifik olarak, bir makine öğrenimi görevi için eğitim verileri oluşturmak üzere Snowflake ve Python kullanarak nasıl bir ETL ardışık düzeni oluşturabileceğinizi göstermek istiyorum. Daha sonra Dask'ı tanıtmak istiyorum ve Satürn Bulutu ve bir veri bilimcisi olarak üretkenliğinizi artırabilmeniz için makine öğrenimi eğitim sürecini gerçekten hızlandırmak amacıyla bulutta paralel işlemeden nasıl yararlanabileceğinizi gösteriyor.
Snowflake ve Python'da ETL'ler Oluşturma
Kodlamaya geçmeden önce Snowflake'in ne olduğunu kısaca açıklasam iyi olur. Bu, yakın zamanda ekibim onu kullanmaya karar verdiğinde sorduğum bir soru. Yüksek düzeyde, buluttaki bir veri ambarıdır. Onunla biraz oynadıktan sonra ne kadar güçlü olduğunu anladım. Bana göre en kullanışlı özelliklerinden biri de kullanabileceğiniz sanal depolar. Sanal ambar, aynı verilere erişmenizi sağlar ancak diğer sanal ambarlardan tamamen bağımsızdır, bu nedenle bilgi işlem kaynakları ekipler arasında paylaşılmaz. Bu, gün boyunca sorgu yürüten diğer kullanıcıların neden olduğu potansiyel performans sorunlarını ortadan kaldırdığı için çok yararlı oldu. Bu, sorguların çalışmasını beklerken daha az hayal kırıklığı ve zaman kaybıyla sonuçlandı.
Snowflake kullanacağımız için, onu nasıl kurabileceğinizi kısaca özetleyeceğim ve kendiniz denemeye başlayacağınız. Aşağıdakileri yapmalıyız:
- Bir Snowflake hesabı oluşturun
- Verilerimizi Snowflake'e aktarın
- SQL ve Snowflake kullanıcı arayüzünü kullanarak sorgularımızı yazın ve test edin
- Modelleme için nihai veri kümemizi oluşturmak üzere sorgularımızı yürütebilen bir Python sınıfı yazın
Bir hesap oluşturmak, kendi platformlarında ücretsiz bir deneme için kaydolmak kadar kolaydır. Web sitesi. Bunu yaptıktan sonra snowsql CLI'yi indirebilirsiniz. okuyun. Bu, Snowflake'e veri eklemeyi kolaylaştıracaktır. Bu adımları izledikten sonra, kimlik bilgilerimizi ve komut satırını kullanarak Snowflake'e bağlanmayı deneyebiliriz.
snowsql -a <account_name> -u <user_name>
Snowflake kullanıcı arabiriminde oturum açtığınızda hesap adınızı URL'de bulabilirsiniz. Şunun gibi görünmelidir: xxxxx.europe-west2.gcp. Tamam, bir sonraki adıma geçelim ve verilerimizi Snowflake'e aktaralım. Burada izlememiz gereken birkaç adım var:
- Sanal depomuzu oluşturun
- Bir veritabanı oluşturun
- Tablolarımızı Tanımlayın ve Oluşturun
- CSV dosyalarımız için bir hazırlama tablosu oluşturun
- Verileri tablolarımıza kopyalamak
Neyse ki bu çok zor değil ve bunu tamamen snowsql CLI kullanarak yapabiliriz. Bu proje için istediğimden daha küçük bir veri seti kullanacağım ama ne yazık ki şirketimin hiçbir verisini kullanamıyorum ve internette uygun büyük veri setlerini bulmak oldukça zor olabilir. Bununla birlikte, Dunnhumby'den bazı işlem verilerini buldum ve bunlar ücretsiz olarak mevcut. Kaggle. Yine de sadece başlangıç için, Dask'ın sklearn'e kıyasla zorluğun üstesinden ne kadar iyi geldiğini test etmek için bu verileri kullanarak çok daha büyük bir sentetik veri kümesi oluşturuyorum.
Öncelikle Snowflake UI içerisinde aşağıdaki komutları kullanarak sanal bir ambar ve veri tabanı kurmamız gerekiyor.
yaratmak or değiştirmek ambar analytics_wh ile
depo_size=”X-KÜÇÜK”
auto_suspend=180
auto_resume=doğru
başlangıçta_suspended=true;
yaratmak or değiştirmek veritabanı dunnhumby;
Verilerimiz, 6 tabloya dönüştüreceğimiz 6 CSV'den oluşuyor. Bu gönderi, verileri yorumlamaktan çok Snowflake ve Dask'ı kullanmakla ilgili olduğundan, veri kümesinin üzerinden geçmek için fazla zaman harcamayacağım.
Tablolarımızı oluşturmak için kullanabileceğimiz komutlar aşağıdadır. Önceden bilmeniz gereken tek şey, hangi sütunlar ve veri türleri ile çalışacağınızdır.
create or replace table campaign_desc ( description string, campaign number,
start_day number,
end_day number ); create or replace table campaign_table ( description string, Household_key number, campaign number ); create or replace table coupon ( COUPON_UPC number, product_id number, campaign number ); create or replace table coupon_redempt ( household_key number, day number, coupon_upc number, campaign number ); create or replace table transactions ( household_key number, BASKET_ID number, day number, product_id number, quantity number, sales_value number, store_id number, retail_disc decimal, trans_time number, week_no number, coupon_disc decimal, coupon_match_disc decimal ); create or replace table demographic_data ( age_dec string, marital_status_code string, income_desc string, homeowner_desc string, hh_comp_desc string, household_size_desc string, kid_category_desc string, Household_key number);
Artık tablolarımızı oluşturduğumuza göre, onlara nasıl veri gireceğimizi düşünmeye başlayabiliriz. Bunun için CSV dosyalarımızı hazırlamamız gerekecek. Bu temelde sadece bir ara adımdır, böylece Snowflake dosyaları doğrudan sahnemizden tablolarımıza yükleyebilir. kullanabiliriz PUT yerel dosyaları sahnemize koyma komutu ve ardından KOPYALAYIN Snowflake'e bu verileri nereye koyacağını bildirmek için komut.
use database dunnhumby; create or replace stage dunnhumby_stage; PUT file://campaigns_table.csv @dunnhumby.public.dunnhumby_stage; PUT file://campaigns_desc.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon_d=redempt.csv @dunnhumby.public.dunnhumby_stage; PUT file://transaction_data.csv @dunnhumby.public.dunnhumby_stage; PUT file://demographics.csv @dunnhumby.public.dunnhumby_stage;
Hızlı bir kontrol olarak, hazırlama alanında ne olduğunu kontrol etmek için bu komutu çalıştırabilirsiniz.
ls @dunnhumby.public.dunnhumby_stage;
Şimdi aşağıdaki sorguları kullanarak verileri tablolarımıza kopyalamamız gerekiyor. Bunları Snowflake kullanıcı arabiriminde veya Snowflake'te oturum açtıktan sonra komut satırında çalıştırabilirsiniz.
copy into campaign_table from @dunnhumby.public.dunnhumby_stage/campaigns_table.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into campaign_desc from @dunnhumby.public.dunnhumby_stage/campaign_desc.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon from @dunnhumby.public.dunnhumby_stage/coupon.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon_redempt from @dunnhumby.public.dunnhumby_stage/coupon_redempt.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into transactions from @dunnhumby.public.dunnhumby_stage/transaction_data.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into demographic_data from @dunnhumby.public.dunnhumby_stage/demographics.csv.gz file_format = ( type = csv skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’);
Tamam harika, şans eseri verilerimizi tablolarımıza aldık, önce deneyin. Ah, keşke bu kadar basit olsaydı, tüm bu süreci düzeltmek için birkaç denemem gerekti (yanlış hecelemeye dikkat edin). Umarım, bunu takip edebilir ve gitmek için iyi olabilirsiniz. İlginç şeylere yaklaşıyoruz ancak yukarıdaki adımlar sürecin hayati bir parçası olduğundan bu adımların her birini anladığınızdan emin olun.
Ardışık Düzenimizi SQL'de Yazmak
Bu sonraki adımda, hedefimizi, özelliklerimizi oluşturmak için sorguları yazacağız ve son olarak bir eğitim veri seti oluşturacağız. Modelleme için bir veri kümesi oluşturmaya yönelik bir yaklaşım, bu verileri belleğe okumak ve yeni özellikler oluşturmak ve tüm veri çerçevelerini bir araya getirmek için pandaları kullanmaktır. Bu, genellikle Kaggle'da ve diğer çevrimiçi eğitimlerde gördüğünüz yaklaşımdır. Bununla ilgili sorun, özellikle makul boyuttaki herhangi bir veri kümesiyle çalışırken çok verimli olmamasıdır. Bu nedenle, ağır işleri, büyük veri kümelerini son derece iyi işleyen ve muhtemelen size çok fazla zaman kazandıracak olan Snowflake gibi bir şeye yaptırmak çok daha iyi bir fikirdir. Göstermeye çalıştığım şey için gerçekten hayati olmadığı için burada veri kümemizin ayrıntılarına dalmak için fazla zaman harcamayacağım. Bununla birlikte, genel olarak, modellemeye başlamadan önce verilerinizi keşfetmek ve anlamak için önemli miktarda zaman harcamak isteyebilirsiniz. Bu sorguların amacı, verileri önceden işlemek ve daha sonra modellerimizde kullanabileceğimiz bazı basit özellikler oluşturmak olacaktır.
Hedef Tanımı
Açıkçası, denetimli makine öğreniminin hayati bir bileşeni, tahmin etmek için uygun bir hedef belirlemektir. Kullanım durumumuz için, bir kullanıcının bir son haftadan sonraki iki hafta içinde başka bir ziyaret yapıp yapmayacağını hesaplayarak karmaşayı tahmin edeceğiz. 2 hafta seçimi oldukça keyfi ve çözmeye çalıştığımız belirli soruna bağlı olacak, ancak bunun bu proje için uygun olduğunu varsayalım. Genel olarak, müşteri kaybının uygun bir tanımına ulaşmak için ziyaretler arasındaki boşlukların dağılımını anlamak amacıyla müşterilerinizi dikkatli bir şekilde analiz etmek isteyebilirsiniz.
Buradaki ana fikir, her tablo için, her bir hane_anahtarı için her bir özelliğimiz için değerler içeren bir satıra sahip olmak istememizdir.
Kampanya Özellikleri
İşlem Özellikleri
Aşağıda, ortalama, maksimum ve standart sapma gibi toplu istatistiklere dayalı bazı basit ölçümler oluşturuyoruz.
Demografik Özellikler
Bu veri setinde çok fazla eksik veri var, bu yüzden burada değerlendirmeyi kullanmaya karar verdim. Eksik verileri bırakmaktan gelişmiş veri yükleme yöntemlerine kadar kayıp veriler için pek çok teknik vardır. Burada hayatı kendim için kolaylaştırdım ve mod ile eksik değerleri değiştirdim. Bu verilerin neden eksik olduğunu anlamak, onunla nasıl başa çıkılacağına karar vermede gerçekten önemli olduğundan, bu yaklaşımı genel olarak benimsemenizi tavsiye etmem, ancak bu örneğin amaçları doğrultusunda, devam edeceğim ve kolay yaklaşımı seçeceğim. Önce özelliklerimizin her biri için modu hesaplıyoruz ve ardından veriler eksikse her satırı modla değiştirmek için birleştirmeyi kullanıyoruz.
Eğitim verileri
Son olarak ana tablolarımızı birleştirerek eğitim verilerimiz için bir sorgu oluşturuyoruz ve sonunda hedef, kampanya, işlem ve model oluşturmak için kullanabileceğimiz demografik özellikleri içeren bir tablo elde ediyoruz.
Kısa bir not olarak, Snowflake'in özellikleri ve nüansları hakkında daha fazla bilgi edinmek isteyenler için aşağıdaki kitabı tavsiye ederim: kar tanesi yemek kitabı. Bu kitabı okumaya başladım ve Snowflake'in nasıl kullanılacağına dair gerçekten yararlı bilgilerle dolu ve burada yaptığımdan çok daha fazla ayrıntıya giriyor.
ETL için Python Kodu
Bu ETL için ihtiyacımız olan son parça, onu çalıştırmak için bir komut dosyası yazmaktır. Bu, yalnızca bunun gibi bir ETL'yi düzenli olarak çalıştırmayı planlıyorsanız gerçekten gereklidir, ancak bu iyi bir uygulamadır ve ETL'yi gerektiğinde ve gerektiğinde çalıştırmayı çok daha kolaylaştırır.
EtlTraining dersimizin ana bileşenlerini kısaca tartışalım. Sınıfımız, kesme haftası olan bir girdi alır. Bu, veri kümemizde verilerin tanımlanma şeklinden kaynaklanmaktadır, ancak normalde bu, eğitim verilerini oluşturmak için seçmek istediğimiz son tarihe karşılık gelen bir tarih biçiminde olacaktır.
Sorgularımızın bir listesini başlatıyoruz, böylece bunlar arasında kolayca dolaşabilir ve yürütebiliriz. Ayrıca Snowflake bağlantımıza ilettiğimiz parametrelerimizi içeren bir sözlük oluşturuyoruz. Burada Saturn Cloud'da kurduğumuz ortam değişkenlerini kullanıyoruz. İşte bunun nasıl yapılacağına dair bir rehberdir. Snowflake'e bağlanmak çok zor değil, tek yapmamız gereken Snowflake konektörünü kullanmak ve kimlik bilgileri sözlüğümüze geçmek. Bunu Snowflake connect yönteminde uyguluyoruz ve bu bağlantıyı bir öznitelik olarak döndürüyoruz.
Bu sorguları çalıştırmayı biraz daha kolaylaştırmak için her sorguyu ml_query_pipeline.py dosyasında bir python dizesi değişkeni olarak kaydediyorum. Execute_etl yöntemi, kutuda tam olarak ne diyorsa onu yapar. Her sorguyu döngüye sokar, biçimlendirir, yürütür ve Snowflake bağlantısını kapatarak bitiririz.
Bu ETL'yi çalıştırmak için aşağıdaki komutları terminale yazabiliriz. (burada ml_pipeline, yukarıdaki betiğin adıdır.)
python -m ml_pipeline -w 102 -j ‘train’
Kısaca belirtmek gerekirse, muhtemelen bunun gibi bir ETL'yi düzenli aralıklarla çalıştırmak isteyeceksiniz. Örneğin, günlük tahminler yapmak istiyorsanız, modelinize geçmek için her gün buna benzer bir veri kümesi oluşturmanız gerekir, böylece hangi müşterilerinizin kaybetme olasılığının yüksek olduğunu belirleyebilirsiniz. Buna burada ayrıntılı olarak girmeyeceğim ama benim işimde, ETL'lerimizi düzenlemek için Airflow kullanıyoruz, bu nedenle ilgileniyorsanız kontrol etmenizi tavsiye ederim. Hatta geçenlerde bir kitap aldım'Apache Airflow ile Veri Ardışık DüzenleriBence bu harika ve hava akışının nasıl kullanılacağına dair gerçekten bazı sağlam örnekler ve tavsiyeler veriyor.
Dask ve Modelleme
Artık veri boru hattımızı oluşturduğumuza göre, modelleme hakkında düşünmeye başlayabiliriz. Bu gönderi için sahip olduğum diğer ana hedef, Dask'ı makine öğrenimi geliştirme sürecinin bir parçası olarak kullanmanın avantajlarını vurgulamak ve size kullanımının ne kadar kolay olduğunu göstermektir.
Projenin bu kısmı için ayrıca kullandım Satürn Bulutu Bu, Dask'ın gücünü buluttaki bir bilgisayar kümesinde kullanmamıza izin veren, son zamanlarda karşılaştığım gerçekten güzel bir araç. Satürn'ü kullanmanın benim için başlıca avantajları, çalışmanızı paylaşmanın gerçekten kolay olması, ihtiyaç duyduğunuzda ve istediğiniz zaman bilgi işleminizi ölçeklendirmenin son derece basit olması ve ücretsiz katman seçeneğine sahip olmasıdır. Genellikle bir grup farklı modeli eğitmek ve neyin en iyi çalıştığını görmek istediğimizden, genel olarak model geliştirme Dask için gerçekten iyi bir kullanım durumudur. Model geliştirmenin diğer önemli yönlerine odaklanmak için daha fazla zamanımız olacağından bunu ne kadar hızlı yapabilirsek o kadar iyi. Snowflake'e benzer şekilde kaydolmanız yeterlidir okuyun ve bir Jupyter laboratuvar örneğini çok hızlı bir şekilde döndürebilir ve onunla kendiniz denemeye başlayabilirsiniz.
Şimdi, bu noktada birkaç kez Dask'tan bahsettiğimi ama bunun ne olduğunu asla tam olarak açıklamadığımı fark ettim. Bu yüzden size Dask'a çok üst düzey bir genel bakış ve bunun neden harika olduğunu düşündüğümü anlatmak için bir dakikanızı ayırmama izin verin. Çok basit bir şekilde Dask, çok büyük veri kümelerini işlemenize ve bunlar üzerinde işlemler gerçekleştirmenize izin vermek için paralel bilgi işlemden yararlanan bir python kitaplığıdır. Ve en iyi yanı, Python'a zaten aşina iseniz, sözdizimi çok benzer olduğu için Dask'ın çok basit olması gerekir.
Aşağıdaki grafik, Dask'ın ana bileşenlerini vurgulamaktadır.
Kaynak: Dask Dokümantasyonu
Koleksiyonlar, daha sonra birden çok bilgisayarda yürütülebilecek bir görev grafiği oluşturmamıza olanak tanır. Diziler ve veri çerçeveleri gibi bu veri yapılarından bazıları muhtemelen kulağa oldukça tanıdık geliyor ve bunlar python'da bulacağınıza benzer, ancak bazı önemli farklılıklar var. Örneğin, bir Dask veri çerçevesini, işlemleri paralel olarak gerçekleştirmemize izin verecek şekilde oluşturulmuş bir grup pandas veri çerçevesi olarak düşünebilirsiniz.
Koleksiyonlardan yola çıkarak zamanlayıcımız var. Görev grafiğini oluşturduğumuzda, zamanlayıcı gerisini bizim için halleder. İş akışını yönetir ve bu görevleri tek bir makineye gönderir veya bir kümeye dağıtır. Umarız, bu size Dask'ın nasıl çalıştığına dair çok kısa bir genel bakış sunar. Daha fazla bilgi için, kontrol etmenizi öneririm belgeleme ya da bu kitap. Her ikisi de bu konuyu daha derine inmek için çok iyi kaynaklardır.
Modelleme için Python Kodu
Modelleme yaparken, her zaman önce deneyeceğim az sayıda go-go-algoritmalara sahip olma eğilimindeyim. Bu genellikle, sahip olduğum belirli soruna neyin uygun olabileceği konusunda bana iyi bir fikir verecektir. Bu modeller Lojistik Regresyon, Rastgele Orman ve GradientBoosting'dir. Deneyimlerime göre, tablo verileriyle çalışırken bu algoritmalar size genellikle oldukça iyi sonuçlar verecektir. Aşağıda, bu 3 modeli kullanarak bir sklearn modelleme ardışık düzeni oluşturuyoruz. Ardışık düzen herhangi bir sklearn sınıflandırma modeli için çalışması gerektiğinden, burada kullandığımız kesin modeller gerçekten önemli değil, bu sadece benim tercihim.
Lafı daha fazla uzatmadan kodlara geçelim. Neyse ki, ön işlememizin çoğunu Snowflake'e yaptırdık, böylece burada eğitim verilerimizle çok fazla uğraşmak zorunda kalmıyoruz, ancak sklearn işlem hatlarını kullanarak birkaç ek adım ekleyeceğiz.
Aşağıdaki ilk kod parçacığı, sklearn kullanılırken işlem hattını gösterir. Veri kümemizin düz, eski bir pandas veri çerçevesi olduğuna ve ön işleme adımlarımızın hepsinin sklearn yöntemleri kullanılarak gerçekleştirildiğine dikkat edin. Burada özellikle sıra dışı bir şey olmuyor. Snowflake ETL'miz tarafından üretilen tablodan verilerimizi okuyor ve bunu bir sklearn boru hattına geçiriyoruz. Olağan modelleme adımları burada geçerlidir. Veri setini tren ve test olarak ayırıyoruz ve bazı ön işlemler yapıyoruz, yani medyanı kullanarak eksik değerleri atfediyoruz, verileri ölçeklendiriyoruz ve kategorik verilerimizi tek seferde kodluyoruz. Sklearn boru hatlarının büyük bir hayranıyım ve bugünlerde ne zaman model geliştirsem temelde bunları kullanıyorum, temiz ve özlü kodu gerçekten kolaylaştırıyorlar.
Bu ardışık düzen, yaklaşık 2 milyon satırlık bir veri kümesinde nasıl performans gösterir? Bu modeli herhangi bir hiperparametre ayarlaması olmadan çalıştırmak yaklaşık 34 dakika sürer. Ah, biraz yavaş. Herhangi bir türde hiperparametre ayarı yapmak isteseydik, bunun ne kadar uzun süreceğini tahmin edebilirsiniz. Tamam, ideal değil ama Dask'ın bu zorluğun üstesinden nasıl geldiğini görelim.
Dask ML Python Kodu
Buradaki amacımız, yukarıdaki sklearn boru hattını geçip geçemeyeceğimizi görmek, spoiler uyarısı, kesinlikle yapabiliriz. Dask ile ilgili harika olan şey, zaten python'a aşina olduğunuzda giriş engelinin oldukça düşük olmasıdır. Sadece birkaç değişiklikle bu boru hattını Dask'ta çalışır hale getirebiliriz.
Muhtemelen fark edeceğiniz ilk değişiklik, bazı farklı ithalatlarımız olmasıdır. Bu boru hattı ile önceki arasındaki en önemli farklardan biri, modelimizi eğitmek için bir pandas veri çerçevesi yerine bir Dask veri çerçevesi kullanacak olmamızdır. Bir Dask veri çerçevesini, her biri üzerinde aynı anda hesaplamalar yapabileceğimiz bir grup pandas veri çerçevesi olarak düşünebilirsiniz. Bu, Dask'ın paralelliğinin özüdür ve bu boru hattı için eğitim süresini azaltacak olan şeydir.
kullandığımıza dikkat @dask.delayed bizim dekoratör olarak load_training_data işlev. Bu, Dask'a bu işlevi bizim için paralelleştirmesi talimatını verir.
Ayrıca Dask'tan bazı ön işleme ve ardışık düzen yöntemlerini içe aktaracağız ve en önemlisi, modellerimizi eğitmek için bir küme oluşturmamızı sağlayacak SaturnCluster'ı içe aktarmamız gerekecek. Bu kodla ilgili bir diğer önemli fark, kullanmamızdır. dask.persist tren testimiz bölündükten sonra. Bu noktadan önce, Dask'ın tembel değerlendirmesi nedeniyle hiçbir fonksiyonumuz hesaplanmamıştı. Yine de persist yöntemini kullandığımızda Dask'a datalarımızı çalışanlara göndermesini ve bu noktaya kadar oluşturduğumuz görevleri yürütmesini ve bu nesneleri cluster'da bırakmasını söylüyoruz.
Son olarak gecikmeli metodu kullanarak modellerimizi eğitiyoruz. Yine, bu işlem hattımızı tembel bir şekilde oluşturmamızı sağlar. Bu koda ulaşana kadar boru hattı yürütülmez:
fit_pipelines = dask.compute(*pipelines_)
Bu kez, bu işlem hattını tamamen aynı veri kümesi üzerinde çalıştırmamız yalnızca yaklaşık 10 dakikamızı aldı. Bu, 3.4 kat bir hızlanma, çok perişan değil. Şimdi, istersek Satürn'deki bir düğmeye dokunarak bilgi işlem kaynaklarımızı ölçeklendirerek bunu daha da hızlandırabiliriz.
Ardışık Düzenimizi Dağıtma
Daha önce, hava akımı gibi bir şey kullanarak muhtemelen bunun gibi bir boru hattını oldukça düzenli bir şekilde çalıştırmak isteyeceğinizden bahsetmiştim. Öyle ki, her şeyi hava akışı için ayarlamanın ilk zorluklarını istemiyorsanız, Satürn Bulut, Jobs ile basit bir alternatif sunuyor. İşler, kodumuzu paketlememize ve düzenli aralıklarla veya gerektiğinde çalıştırmamıza izin verir. Tek yapmanız gereken mevcut bir projeye gitmek ve bir iş oluştur'a tıklamak. Bunu yaptığımızda, aşağıdaki gibi görünmelidir:
Kaynak: Satürn
Buradan tek yapmamız gereken yukarıdaki python dosyalarımızın görseldeki dizinde olduğundan emin olmak ve yukarıdaki python komutumuzu girebiliyoruz.
python -m ml_pipeline -w 102 -j 'train'
İsterseniz ETL'yi günlük olarak çalıştırmak için cron sözdizimini kullanarak bir program da ayarlayabiliriz. ilgilenenler için burada bir Klavuz bu tüm ayrıntılara giriyor.
Sonuçlar ve Çıkarımlar
Evet, bu noktada projemizin sonuna geldik. Şimdi açıkçası, makine öğrenimi geliştirme döngüsünün hiperparametre ayarı ve modelimizi dağıtma gibi bazı önemli kısımlarını dışarıda bıraktım ama belki bunu başka bir güne bırakacağım. Dask'ı denemelisin bence? Hiçbir şekilde uzman değilim ama şimdiye kadar gördüklerime göre kesinlikle gerçekten yararlı görünüyor ve onunla daha fazla deney yapmak ve onu bir veri bilimcisi olarak günlük çalışmalarıma dahil etmek için daha fazla fırsat bulmak için çok heyecanlıyım. Umarız bunu faydalı bulmuşsunuzdur ve siz de Snowflake ve Dask'ın bazı avantajlarını görebilir ve bunları kendi başınıza denemeye başlayabilirsiniz.
Kaynaklar
- Apache Airflow ile Veri Ardışık Düzenleri
- kar tanesi yemek kitabı
- Python ve Dask ile Geniş Ölçekte Veri Bilimi
- Coursera: Veri Bilimi için SQL
Diğer yazılarımdan bazıları ilginizi çekebilir
Gauss Karışım Modellemesi (GMM)
Zaman Serisi Tahminine Bayesçi Bir Yaklaşım
Not: Bu gönderideki bağlantılardan bazıları bağlı kuruluş bağlantılarıdır.
Bio: daniel foley mobil oyun endüstrisinde çalışan eski bir Ekonomist ve Veri Bilimcisidir.
orijinal. İzinle yeniden yayınlandı.
İlgili:
Kaynak: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- erişim
- Hesap
- Ek
- avantaj
- tavsiye
- bağlı şirket
- algoritmalar
- Türkiye
- Amazon
- Apache
- ALAN
- etrafında
- Oto
- İYİ
- Bit
- inşa etmek
- bina
- Demet
- Kampanya
- durumlarda
- neden
- meydan okuma
- değişiklik
- denetleme
- sınıflandırma
- yakın
- bulut
- kod
- kodlama
- bileşen
- hesaplamak
- bilgisayarlar
- bilgisayar
- Coursera
- Oluşturma
- Tanıtım
- Müşteriler
- veri
- veri bilimi
- veri bilimcisi
- veri seti
- veri ambarı
- veritabanı
- gün
- anlaşma
- derin öğrenme
- demografik
- ayrıntı
- geliştirmek
- gelişme
- DID
- yönetmen
- verim
- Mühendisler
- çevre
- deneme
- Özellikler
- Nihayet
- ince
- Ad
- odak
- takip et
- biçim
- Ücretsiz
- tam
- işlev
- kumar
- Oyun endüstrisi
- genel
- Tercih Etmenizin
- GPU'lar
- harika
- rehberlik
- okuyun
- Yüksek
- Vurgulamak
- Ne kadar
- Nasıl Yapılır
- HTTPS
- Kocaman
- Fikir
- belirlemek
- görüntü
- Artırmak
- sanayi
- bilgi
- bilgi
- sorunlar
- IT
- İş
- Mesleki Öğretiler
- kaydol
- atlama
- anahtar
- büyük
- ÖĞRENİN
- öğrenme
- seviye
- Kütüphane
- çizgi
- Liste
- yük
- yerel
- Uzun
- makine öğrenme
- Metrikleri
- milyon
- ML
- Telefon
- Mobil oyun
- model
- hareket
- yani
- Yeni Özellikler
- Teklifler
- Online
- Operasyon
- seçenek
- Diğer
- performans
- Bol bol
- Mesajlar
- güç kelimesini seçerim
- Tahminler
- Üretilmiş
- verimlilik
- proje
- halka açık
- Python
- Okuma
- azaltmak
- gerileme
- Kaynaklar
- DİNLENME
- Sonuçlar
- koşmak
- koşu
- ölçek
- ölçekleme
- Bilim
- bilim adamları
- Dizi
- set
- ayar
- paylaş
- Paylaşılan
- Basit
- küçük
- So
- ÇÖZMEK
- hız
- geçirmek
- Harcama
- Dönme
- bölmek
- SQL
- Aşama
- başlama
- başladı
- istatistik
- hikayeler
- akış
- Hedef
- test
- Düşünme
- zaman
- üst
- dokunma
- Eğitim
- işlem
- işlemler
- deneme
- Öğreticiler
- ui
- us
- kullanıcılar
- Sanal
- depo
- hafta
- Nedir
- içinde
- İş
- işçiler
- iş akışı
- çalışır
- yazı yazıyor
- X
- yıl