ساخت خطوط لوله یادگیری ماشین با استفاده از Snowflake و Dask
در این پست، میخواهم برخی از ابزارهایی را که اخیراً در حال بررسی آنها بودهام به اشتراک بگذارم و به شما نشان دهم که چگونه از آنها استفاده میکنم و چگونه به بهبود کارایی گردش کار من کمک کردند. دو موردی که به طور خاص در مورد آنها صحبت خواهم کرد، Snowflake و Dask هستند. دو ابزار بسیار متفاوت اما ابزارهایی که بهخوبی یکدیگر را تکمیل میکنند، مخصوصاً به عنوان بخشی از چرخه حیات ML.
By دانیل فولی، دانشمند داده
معرفی
اخیراً سعی کرده ام راه های بهتری برای بهبود گردش کار خود به عنوان یک دانشمند داده پیدا کنم. من تمایل دارم بخش مناسبی از وقتم را صرف مدل سازی و ساختن ETL در شغلم کنم. این بدان معنی است که من بیشتر و بیشتر به ابزارهایی برای مدیریت قابل اعتماد و کارآمد مجموعه داده های بزرگ نیاز دارم. من به سرعت متوجه شدم که استفاده از پانداها برای دستکاری این مجموعه داده ها همیشه رویکرد خوبی نیست و این باعث شد که به دنبال گزینه های دیگر باشم.
در این پست، میخواهم برخی از ابزارهایی را که اخیراً در حال بررسی آنها بودهام به اشتراک بگذارم و به شما نشان دهم که چگونه از آنها استفاده میکنم و چگونه به بهبود کارایی گردش کار من کمک کردند. دو موردی که به طور خاص در مورد آنها صحبت خواهم کرد، Snowflake و Dask هستند. دو ابزار بسیار متفاوت اما ابزارهایی که بهخوبی یکدیگر را تکمیل میکنند، مخصوصاً به عنوان بخشی از چرخه حیات ML. امیدوارم پس از خواندن این پست به خوبی متوجه شوید که Snowflake و Dask چیست، چگونه می توان از آنها به طور موثر استفاده کرد و بتوانید با موارد استفاده خود راه اندازی کنید.
به طور خاص، من می خواهم به شما نشان دهم که چگونه می توانید با استفاده از Snowflake و Python یک خط لوله ETL بسازید تا داده های آموزشی برای یک کار یادگیری ماشین تولید کنید. سپس می خواهم Dask و را معرفی کنم ابر زحل و به شما نشان می دهد که چگونه می توانید از مزایای پردازش موازی در فضای ابری برای سرعت بخشیدن به فرآیند آموزش ML استفاده کنید تا بتوانید بهره وری خود را به عنوان یک دانشمند داده افزایش دهید.
ساختن ETL در Snowflake و Python
قبل از اینکه به کدنویسی بپردازیم، بهتر است به طور خلاصه توضیح دهم که Snowflake چیست. این سوالی است که اخیراً وقتی تیمم تصمیم گرفت از آن استفاده کند پرسیدم. در سطح بالا، یک انبار داده در فضای ابری است. بعد از مدتی بازی کردن با آن، متوجه شدم که چقدر قدرتمند است. فکر می کنم برای من یکی از کاربردی ترین امکانات، انبارهای مجازی است که می توانید از آن استفاده کنید. یک انبار مجازی به شما امکان دسترسی به داده های مشابه را می دهد اما کاملاً مستقل از سایر انبارهای مجازی است بنابراین منابع محاسباتی بین تیم ها به اشتراک گذاشته نمی شود. این بسیار مفید است زیرا هر گونه پتانسیل مشکلات عملکرد ناشی از اجرای پرسوجوهای دیگر کاربران را در طول روز حذف میکند. این منجر به ناامیدی کمتر و اتلاف زمان در انتظار برای اجرای پرس و جوها شده است.
از آنجایی که ما قرار است از Snowflake استفاده کنیم، به طور خلاصه نحوه تنظیم آن را توضیح خواهم داد و خودتان شروع به آزمایش آن کنید. باید موارد زیر را انجام دهیم:
- یک حساب Snowflake راه اندازی کنید
- داده های ما را در Snowflake دریافت کنید
- درخواست های ما را با استفاده از SQL و Snowflake UI بنویسید و آزمایش کنید
- یک کلاس پایتون بنویسید که بتواند کوئری های ما را برای تولید مجموعه داده نهایی برای مدل سازی اجرا کند
راه اندازی یک حساب کاربری به آسانی ثبت نام برای یک نسخه آزمایشی رایگان در آنها است سایت اینترنتی. پس از انجام این کار می توانید snowsql CLI را دانلود کنید اینجا کلیک نمایید. این کار اضافه کردن داده به Snowflake را آسان می کند. پس از انجام این مراحل، میتوانیم با استفاده از اعتبار و خط فرمان به Snowflake متصل شویم.
snowsql -a <account_name> -u <user_name>
هنگامی که به Snowflake UI وارد می شوید، می توانید نام حساب خود را در URL پیدا کنید. باید چیزی شبیه این باشد: xxxxx.europe-west2.gcp. خوب، بیایید به مرحله بعدی برویم و داده های خود را در Snowflake قرار دهیم. چند مرحله وجود دارد که باید در اینجا دنبال کنیم:
- انبار مجازی ما را ایجاد کنید
- یک پایگاه داده ایجاد کنید
- جداول ما را تعریف و ایجاد کنید
- یک جدول مرحله بندی برای فایل های CSV ما ایجاد کنید
- کپی کردن داده ها در جداول ما
خوشبختانه این خیلی سخت نیست و ما می توانیم این کار را کاملاً با استفاده از snowsql CLI انجام دهیم. برای این پروژه، من از مجموعه دادهای کوچکتر از آنچه که میخواهم استفاده خواهم کرد، اما متأسفانه، نمیتوانم از هیچ یک از دادههای شرکتم استفاده کنم و یافتن مجموعه دادههای بزرگ مناسب آنلاین میتواند بسیار دشوار باشد. با این حال من برخی از داده های تراکنش را از Dunnhumby پیدا کردم که به صورت رایگان در دسترس است کجگل. فقط برای ضربه زدن، من یک مجموعه داده مصنوعی بسیار بزرگتر را با استفاده از این داده ها ایجاد می کنم تا آزمایش کنم که Dask در مقایسه با sklearn چقدر از عهده چالش بر می آید.
اول از همه، باید یک انبار مجازی و یک پایگاه داده با استفاده از دستورات زیر در Snowflake UI راه اندازی کنیم.
ایجاد or جایگزین کردن تجزیه و تحلیل انبار_wh با
warehouse_size=”X-SMALL”
auto_suspend=180
auto_resume=true
firstly_suspended=true;
ایجاد or جایگزین کردن پایگاه داده dunnhumby;
داده های ما شامل 6 CSV است که به 6 جدول تبدیل می کنیم. من زمان زیادی را صرف بررسی مجموعه داده نمیکنم زیرا این پست بیشتر در مورد استفاده از Snowflake و Dask است تا تفسیر دادهها.
در زیر دستوراتی وجود دارد که می توانیم برای ایجاد جداول خود از آنها استفاده کنیم. تنها چیزی که باید از قبل بدانید این است که با چه ستونها و انواع دادهها کار خواهید کرد.
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);
اکنون که جداول خود را ایجاد کردهایم، میتوانیم به نحوه وارد کردن دادهها به آنها فکر کنیم. برای این کار، باید فایل های CSV خود را مرحله بندی کنیم. این اساساً فقط یک مرحله واسطه است تا Snowflake بتواند مستقیماً فایل ها را از مرحله ما در جداول ما بارگذاری کند. ما می توانیم استفاده کنیم قرار دادن دستور برای قرار دادن فایل های محلی در مرحله ما و سپس کپی در دستور به Snowflake را برای قرار دادن این داده ها.
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;
به عنوان یک بررسی سریع، می توانید این دستور را برای بررسی آنچه در ناحیه مرحله بندی است اجرا کنید.
ls @dunnhumby.public.dunnhumby_stage;
اکنون فقط باید داده ها را با استفاده از پرس و جوهای زیر در جداول خود کپی کنیم. شما می توانید این موارد را در رابط کاربری Snowflake یا در خط فرمان پس از ورود به Snowflake اجرا کنید.
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=’”’);
بسیار خوب، با هر شانسی، ابتدا داده هایمان را در جداول خود داریم امتحان کنید. آه، اگر به همین سادگی بود، کل این فرآیند چند بار تلاش کرد تا درست شود (مراقب املایی اشتباه باشید). امیدوارم بتوانید این را دنبال کنید و خوب باشید. ما در حال نزدیکتر شدن به موارد جالب هستیم، اما مراحل بالا بخش مهمی از فرآیند هستند، بنابراین مطمئن شوید که هر یک از این مراحل را درک کردهاید.
نوشتن خط لوله ما در SQL
در این مرحله بعدی، کوئریها را مینویسیم تا هدف، ویژگیهایمان را تولید کنیم و در نهایت یک مجموعه داده آموزشی تولید کنیم. یکی از روشهای ایجاد یک مجموعه داده برای مدلسازی، خواندن این دادهها در حافظه و استفاده از پانداها برای ایجاد ویژگیهای جدید و پیوستن تمام فریمهای داده به یکدیگر است. این معمولاً رویکردی است که در Kaggle و سایر آموزش های آنلاین مشاهده می کنید. مشکل این است که بسیار کارآمد نیست، به خصوص زمانی که با مجموعه داده هایی با اندازه معقول کار می کنید. به همین دلیل، ایده بسیار بهتری است که کارهای سنگین را به چیزی مانند Snowflake برون سپاری کنید که مجموعه داده های عظیم را به خوبی مدیریت می کند و احتمالاً در زمان شما صرفه جویی می کند. من زمان زیادی را صرف بررسی جزئیات مجموعه دادههایمان در اینجا نمیکنم، زیرا برای چیزی که میخواهم نشان دهم واقعاً حیاتی نیست. با این حال، به طور کلی، قبل از شروع مدلسازی، میخواهید زمان قابل توجهی را صرف کاوش و درک دادههای خود کنید. هدف این پرسوجوها پردازش پیشپردازش دادهها و ایجاد برخی ویژگیهای ساده است که بعداً میتوانیم در مدلهای خود استفاده کنیم.
تعریف هدف
بدیهی است که یکی از اجزای حیاتی یادگیری ماشینی تحت نظارت، تعریف یک هدف مناسب برای پیشبینی است. برای مورد استفاده ما، با محاسبه اینکه آیا کاربر در عرض دو هفته پس از یک هفته قطع، بازدید دیگری انجام می دهد یا خیر، ریزش را پیش بینی می کنیم. انتخاب 2 هفته کاملاً خودسرانه است و به مشکل خاصی که در تلاش برای حل آن هستیم بستگی دارد، اما اجازه دهید فرض کنیم که برای این پروژه خوب است. به طور کلی، شما می خواهید مشتریان خود را به دقت تجزیه و تحلیل کنید تا توزیع شکاف بین بازدیدها را درک کنید تا به تعریف مناسبی از ریزش برسید.
ایده اصلی در اینجا این است که برای هر جدول میخواهیم یک ردیف در هر home_key حاوی مقادیر برای هر یک از ویژگیهایمان داشته باشیم.
ویژگی های کمپین
ویژگی های تراکنش
در زیر چند معیار ساده بر اساس آمار کل مانند میانگین، حداکثر و انحراف استاندارد ایجاد می کنیم.
ویژگی های جمعیت شناختی
این مجموعه دادههای گمشده زیادی دارد، بنابراین من تصمیم گرفتم از imputation در اینجا استفاده کنم. تکنیکهای زیادی برای دادههای از دست رفته از حذف دادههای از دست رفته گرفته تا روشهای انتساب پیشرفته وجود دارد. من به تازگی زندگی را برای خودم در اینجا آسان کرده ام و مقادیر از دست رفته را با حالت جایگزین کرده ام. من لزوماً استفاده از این رویکرد را به طور کلی توصیه نمیکنم زیرا درک اینکه چرا این دادهها از دست میروند واقعاً در تصمیمگیری درباره نحوه برخورد با آن مهم است، اما برای اهداف این مثال، من پیش میروم و رویکرد آسان را در پیش میگیرم. ابتدا حالت را برای هر یک از ویژگی های خود محاسبه می کنیم و سپس از ادغام برای جایگزینی هر ردیف با حالت در صورت عدم وجود داده استفاده می کنیم.
داده های آموزش
در نهایت، ما یک پرس و جو برای داده های آموزشی خود با پیوستن به جداول اصلی خود به یکدیگر می سازیم و در نهایت به جدولی حاوی هدف، کمپین، تراکنش ها و ویژگی های جمعیتی ما می رسیم که می توانیم از آن برای ساخت یک مدل استفاده کنیم.
به طور خلاصه، برای کسانی که علاقه مند به یادگیری بیشتر در مورد ویژگی ها و تفاوت های ظریف Snowflake هستند، کتاب زیر را توصیه می کنم: کتاب آشپزی دانه برف. من شروع به خواندن این کتاب کردم و پر از اطلاعات بسیار مفید در مورد نحوه استفاده از Snowflake است و به جزئیات بسیار بیشتری نسبت به من در اینجا می پردازد.
کد پایتون برای ETL
آخرین قطعه مورد نیاز ما برای این ETL نوشتن یک اسکریپت برای اجرای آن است. اکنون، این فقط در صورتی واقعاً مورد نیاز است که قصد دارید یک ETL مانند این را به طور منظم اجرا کنید، اما این تمرین خوبی است و اجرای ETL را در صورت نیاز و در صورت نیاز بسیار آسانتر میکند.
بیایید به طور خلاصه در مورد اجزای اصلی کلاس EtlTraining بحث کنیم. کلاس ما یک ورودی می گیرد که هفته قطع است. این به دلیل روشی است که داده ها در مجموعه داده ما تعریف می شوند، اما معمولاً این در قالب تاریخی است که مطابق با تاریخ قطعی است که می خواهیم برای تولید داده های آموزشی انتخاب کنیم.
ما لیستی از پرس و جوهای خود را مقداردهی اولیه می کنیم تا بتوانیم به راحتی آنها را حلقه زده و آنها را اجرا کنیم. ما همچنین یک فرهنگ لغت حاوی پارامترهای خود را ایجاد می کنیم که به اتصال Snowflake خود منتقل می کنیم. در اینجا از متغیرهای محیطی استفاده می کنیم که در Saturn Cloud تنظیم کرده ایم. اینجا راهنمای نحوه انجام این کار است. اتصال به Snowflake خیلی سخت نیست، تنها کاری که باید انجام دهیم این است که از کانکتور Snowflake استفاده کرده و در فرهنگ لغت اعتبارنامه خود عبور دهیم. ما این را در روش اتصال Snowflake پیاده سازی می کنیم و این اتصال را به عنوان یک ویژگی برمی گردانیم.
برای اینکه اجرای این پرس و جوها کمی ساده تر شود، هر پرس و جو را به عنوان یک متغیر رشته پایتون در فایل ml_query_pipeline.py ذخیره می کنم. متد execute_etl دقیقاً همان کاری را که روی tin می گوید انجام می دهد. هر کوئری را حلقه می کنیم، آن را قالب بندی می کنیم، اجرا می کنیم و با بستن اتصال Snowflake کار را به پایان می رسانیم.
برای اجرای این ETL می توانیم به سادگی دستورات زیر را در ترمینال تایپ کنیم. (که ml_pipeline نام اسکریپت بالا است.)
python -m ml_pipeline -w 102 -j ‘train’
به طور خلاصه، احتمالاً می خواهید یک ETL مانند این را در فواصل زمانی منظم اجرا کنید. به عنوان مثال، اگر میخواهید پیشبینیهای روزانه انجام دهید، باید هر روز مجموعه دادهای مانند این ایجاد کنید تا به مدل خود منتقل شود تا بتوانید تشخیص دهید که کدام یک از مشتریان شما احتمالاً از بین میروند. من در اینجا به جزئیات این موضوع نمی پردازم، اما در شغلم، ما از Airflow برای هماهنگ کردن ETL های خود استفاده می کنیم، بنابراین اگر علاقه مند هستید، توصیه می کنم آن را بررسی کنید. در واقع، من اخیراً یک کتاب خریدمخطوط لوله داده با جریان هوای آپاچیکه به نظر من عالی است و واقعاً چند مثال و توصیه محکم در مورد نحوه استفاده از جریان هوا می دهد.
داسک و مدلسازی
اکنون که خط لوله داده خود را ساخته ایم، می توانیم به مدل سازی فکر کنیم. هدف اصلی دیگری که برای این پست دارم این است که مزایای استفاده از Dask را به عنوان بخشی از فرآیند توسعه ML برجسته کنم و به شما دوستان نشان دهم که چقدر استفاده از آن آسان است.
برای این قسمت از پروژه هم استفاده کردم ابر زحل این ابزار واقعاً خوبی است که اخیراً با آن برخورد کردم و به ما امکان میدهد تا از قدرت Dask در خوشهای از رایانههای ابری استفاده کنیم. مزیت اصلی استفاده از Saturn برای من این است که به اشتراک گذاری کار شما واقعاً آسان است، بسیار ساده است که محاسبات خود را در صورت نیاز و زمانی که به آن نیاز دارید بزرگ کنید و دارای یک گزینه لایه رایگان است. توسعه مدل به طور کلی یک مورد استفاده بسیار خوب برای Dask است، زیرا ما معمولاً میخواهیم دستهای از مدلهای مختلف را آموزش دهیم و ببینیم چه چیزی بهتر عمل میکند. هرچه سریعتر بتوانیم این کار را انجام دهیم، بهتر است زیرا زمان بیشتری برای تمرکز بر سایر جنبه های مهم توسعه مدل داریم. مشابه Snowflake فقط باید ثبت نام کنید اینجا کلیک نمایید و شما می توانید خیلی سریع نمونه ای از آزمایشگاه Jupyter را بچرخانید و خودتان شروع به آزمایش آن کنید.
اکنون، در این مرحله متوجه شدم که چند بار به Dask اشاره کردهام اما هرگز واقعاً توضیح ندادهام که چیست. بنابراین اجازه دهید یک لحظه به شما یک نمای کلی از Dask و اینکه چرا فکر می کنم عالی است به شما ارائه دهم. خیلی ساده، Dask یک کتابخانه پایتون است که از محاسبات موازی استفاده می کند تا به شما امکان پردازش و انجام عملیات روی مجموعه داده های بسیار بزرگ را بدهد. و بهترین قسمت این است که اگر قبلاً با پایتون آشنایی دارید، Dask باید بسیار ساده باشد زیرا نحو بسیار شبیه به هم است.
نمودار زیر اجزای اصلی Dask را نشان می دهد.
منبع: Dosk Documentation
مجموعهها به ما اجازه میدهند تا نموداری از وظایف ایجاد کنیم که میتوان آن را در چندین رایانه اجرا کرد. برخی از این ساختارهای دادهای مانند آرایهها و فریمهای داده احتمالاً بسیار آشنا به نظر میرسند و شبیه آنچه در پایتون میبینید، اما با برخی تفاوتهای مهم هستند. به عنوان مثال، شما می توانید یک قاب داده Dask را به عنوان دسته ای از فریم های داده پاندا در نظر بگیرید که به گونه ای ساخته شده اند که به ما امکان می دهد عملیات را به صورت موازی انجام دهیم.
با حرکت از مجموعهها، زمانبندی را داریم. هنگامی که نمودار کار را ایجاد می کنیم، زمانبندی بقیه موارد را برای ما انجام می دهد. گردش کار را مدیریت می کند و این وظایف را به یک ماشین می فرستد یا آنها را در یک خوشه توزیع می کند. امیدواریم این یک نمای کلی از نحوه عملکرد Dask به شما بدهد. برای اطلاعات بیشتر، من پیشنهاد می کنم بررسی کنید مستندات و یا این کتاب. هر دو منابع بسیار خوبی برای کاوش عمیق تر در این موضوع هستند.
کد پایتون برای مدل سازی
هنگام مدلسازی، تعداد کمی از الگوریتمهای پیشرو دارم که همیشه ابتدا آنها را امتحان میکنم. این به طور کلی به من ایده خوبی از آنچه ممکن است برای مشکل خاصی که دارم مناسب باشد، می دهد. این مدل ها رگرسیون لجستیک، جنگل تصادفی و تقویت گرادیان هستند. در تجربه من، هنگام کار با داده های جدولی، این الگوریتم ها معمولاً نتایج بسیار خوبی به شما می دهند. در زیر با استفاده از این 3 مدل یک خط لوله مدل سازی اسکلرن می سازیم. مدلهای دقیقی که در اینجا استفاده میکنیم واقعاً مهم نیستند، زیرا خط لوله باید برای هر مدل طبقهبندی sklearn کار کند، این فقط ترجیح من است.
بدون هیچ مقدمه ای، بیایید وارد کد شویم. خوشبختانه ما بیشتر پیش پردازش های خود را به Snowflake برون سپاری کردیم، بنابراین مجبور نیستیم در اینجا زیاد با داده های آموزشی خود درگیر شویم، اما چند مرحله اضافی را با استفاده از خطوط لوله sklearn اضافه خواهیم کرد.
اولین قطعه کد زیر خط لوله را هنگام استفاده از sklearn نشان می دهد. توجه داشته باشید که مجموعه داده ما یک قاب داده ساده پانداهای قدیمی است و مراحل پیش پردازش ما همه با استفاده از روشهای sklearn انجام میشود. هیچ چیز غیرعادی خاصی در اینجا وجود ندارد. ما در حال خواندن داده های خود از جدول تولید شده توسط Snowflake ETL خود هستیم و آن را به خط لوله sklearn منتقل می کنیم. مراحل معمول مدل سازی در اینجا اعمال می شود. ما مجموعه داده را به آموزش تقسیم میکنیم و آزمایش میکنیم و برخی از پیشپردازشها را انجام میدهیم، یعنی مقادیر گمشده را با استفاده از میانه درج میکنیم، دادهها را مقیاسبندی میکنیم و دادههای دستهبندی خود را یکبار کدگذاری میکنیم. من از طرفداران پر و پا قرص خطوط لوله sklearn هستم و اساساً هر زمان که مدلهایی را توسعه میدهم از آنها استفاده میکنم، آنها واقعا کدهای تمیز و مختصر را تسهیل میکنند.
این خط لوله بر روی یک مجموعه داده با حدود 2 میلیون ردیف چگونه عمل می کند؟ خوب، اجرای این مدل بدون هیچ تنظیم هایپرپارامتری حدود 34 دقیقه طول می کشد. اوه، یه جورایی آهسته می توانید تصور کنید که اگر بخواهیم هر نوع تنظیم هایپرپارامتری را انجام دهیم، این کار چقدر طول می کشد. خوب، پس ایدهآل نیست، اما بیایید ببینیم Dask چگونه چالش را مدیریت میکند.
کد Dask ML پایتون
هدف ما در اینجا این است که ببینیم آیا می توانیم خط لوله sklearn در بالا را شکست دهیم، هشدار اسپویلر، قطعاً می توانیم. نکته جالب در مورد Dask این است که وقتی از قبل با پایتون آشنایی دارید، مانع ورود شما بسیار کم است. ما میتوانیم این خط لوله را تنها با چند تغییر در Dask راهاندازی کنیم.
اولین تغییری که احتمالا متوجه خواهید شد این است که ما واردات متفاوتی داریم. یکی از تفاوت های کلیدی بین این خط لوله و خط لوله قبلی این است که ما از یک قاب داده Dask به جای قاب داده پاندا برای آموزش مدل خود استفاده خواهیم کرد. شما می توانید یک قاب داده Dask را به عنوان یک دسته از فریم های داده پاندا در نظر بگیرید که در آن می توانیم محاسبات را روی هر یک به طور همزمان انجام دهیم. این هسته موازی Dask است و چیزی است که زمان آموزش این خط لوله را کاهش می دهد.
توجه کنید که استفاده می کنیم @dask.delayed به عنوان یک تزئین کننده برای ما load_training_data تابع. این به Dask دستور می دهد تا این تابع را برای ما موازی کند.
ما همچنین قصد داریم چند روش پیش پردازش و خط لوله را از Dask وارد کنیم و مهمتر از همه، باید SaturnCluster را وارد کنیم که به ما امکان می دهد یک خوشه برای آموزش مدل های خود ایجاد کنیم. تفاوت کلیدی دیگر با این کد این است که ما از آن استفاده می کنیم dask.persist بعد از جدا شدن تست قطار ما قبل از این مرحله، هیچ یک از توابع ما واقعاً به دلیل ارزیابی تنبل Dask محاسبه نشده بود. زمانی که از متد persist استفاده میکنیم، به Dask میگوییم که دادههای ما را برای کارگران بفرستد و وظایفی را که تا این لحظه ایجاد کردهایم اجرا کند و این اشیاء را در خوشه بگذارد.
در نهایت مدل های خود را با استفاده از روش تاخیری آموزش می دهیم. باز هم، این ما را قادر می سازد تا خط لوله خود را به روشی تنبل ایجاد کنیم. خط لوله تا زمانی که به این کد نرسیم اجرا نمی شود:
fit_pipelines = dask.compute(*pipelines_)
این بار فقط حدود 10 دقیقه طول کشید تا این خط لوله را دقیقاً روی همان مجموعه داده اجرا کنیم. این یک افزایش سرعت با ضریب 3.4 است، نه خیلی ضعیف. حالا، اگر بخواهیم، میتوانیم با افزایش مقیاس منابع محاسباتی خود با فشار دادن یک دکمه در زحل، سرعت این کار را بیشتر کنیم.
استقرار خط لوله ما
قبلاً اشاره کردم که احتمالاً می خواهید خط لوله ای مانند این را به طور منظم با استفاده از چیزی مانند جریان هوا اجرا کنید. اتفاقاً اگر نمی خواهید دردسرهای اولیه را برای تنظیم همه چیز برای جریان هوا ایجاد کنید، Saturn Cloud یک جایگزین ساده با جابز ارائه می دهد. Jobs به ما این امکان را می دهد که کد خود را بسته بندی کنیم و آن را در فواصل منظم یا در صورت نیاز اجرا کنیم. تنها کاری که باید انجام دهید این است که به یک پروژه موجود بروید و روی ایجاد شغل کلیک کنید. وقتی این کار را انجام دادیم، باید به شکل زیر باشد:
منبع: زحل
از اینجا، تنها کاری که باید انجام دهیم این است که مطمئن شویم فایل های پایتون بالا در دایرکتوری موجود در تصویر هستند و می توانیم دستور پایتون خود را در بالا وارد کنیم.
python -m ml_pipeline -w 102 -j 'train'
همچنین میتوانیم با استفاده از cron syntax برای اجرای روزانه ETL برنامهریزی کنیم. برای علاقه مندان، در اینجا یک آموزش که می رود به تمام ریزدانه.
نتیجه گیری و نکات مهم
خوب، ما در این مرحله به پایان پروژه خود رسیده ایم. اکنون بدیهی است که من برخی از بخش های کلیدی چرخه توسعه ML مانند تنظیم هایپرپارامتر و استقرار مدل خود را کنار گذاشته ام، اما شاید آن را برای یک روز دیگر رها کنم. آیا فکر می کنم باید Dask را امتحان کنید؟ من به هیچ وجه متخصص نیستم، اما با توجه به آنچه تاکنون دیده ام، مطمئناً واقعاً مفید به نظر می رسد و من بسیار هیجان زده هستم که بیشتر با آن آزمایش کنم و فرصت های بیشتری برای گنجاندن آن در کار روزانه خود به عنوان یک دانشمند داده پیدا کنم. امیدواریم این مورد برای شما مفید بوده باشد و شما نیز می توانید برخی از مزایای Snowflake و Dask را ببینید و خودتان شروع به آزمایش آنها کنید.
منابع
- خطوط لوله داده با جریان هوای آپاچی
- کتاب آشپزی دانه برف
- علم داده در مقیاس با پایتون و دسک
- دوره آموزشی: SQL برای علوم داده
برخی از پست های دیگر من ممکن است برای شما جالب باشد
بیایید یک خط لوله داده جریانی بسازیم
رویکرد بیزی به پیش بینی سری های زمانی
توجه: برخی از لینک های این پست لینک های وابسته هستند.
بیوگرافی: دانیل فولی یک اکونومیست سابق است که به دانشمند داده تبدیل شده و در صنعت بازی های موبایلی کار می کند.
اصلی. مجدداً با اجازه دوباره ارسال شد.
مرتبط:
منبع: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- دسترسی
- حساب
- اضافی
- مزیت - فایده - سود - منفعت
- نصیحت
- وابسته
- الگوریتم
- معرفی
- آمازون
- آپاچی
- محدوده
- دور و بر
- خودکار
- بهترین
- بیت
- ساختن
- بنا
- دسته
- کمپین بین المللی حقوق بشر
- موارد
- ایجاد می شود
- به چالش
- تغییر دادن
- بررسی
- طبقه بندی
- نزدیک
- ابر
- رمز
- برنامه نویسی
- جزء
- محاسبه
- کامپیوتر
- محاسبه
- Coursera
- ایجاد
- مجوزها و اعتبارات
- مشتریان
- داده ها
- علم اطلاعات
- دانشمند داده
- مجموعه داده ها
- انبار داده
- پایگاه داده
- روز
- مقدار
- یادگیری عمیق
- جمعیتی
- جزئیات
- توسعه
- پروژه
- DID
- مدیر
- بهره وری
- مورد تأیید
- محیط
- تجربه
- امکانات
- سرانجام
- پایان
- نام خانوادگی
- تمرکز
- به دنبال
- قالب
- رایگان
- کامل
- تابع
- بازی
- صنعت بازی
- سوالات عمومی
- خوب
- GPU ها
- بزرگ
- راهنمایی
- اینجا کلیک نمایید
- زیاد
- نماد
- چگونه
- چگونه
- HTTPS
- بزرگ
- اندیشه
- شناسایی
- تصویر
- افزایش
- صنعت
- اطلاعات
- اطلاعات
- مسائل
- IT
- کار
- شغل ها
- پیوستن
- پرش
- کلید
- بزرگ
- یاد گرفتن
- یادگیری
- سطح
- کتابخانه
- لاین
- لینک
- فهرست
- بار
- محلی
- طولانی
- فراگیری ماشین
- متریک
- میلیون
- ML
- موبایل
- بازی موبایل
- مدل
- حرکت
- از جمله
- ویژگی های جدید
- پیشنهادات
- آنلاین
- عملیات
- گزینه
- دیگر
- کارایی
- بسیاری
- پست ها
- قدرت
- پیش بینی
- ساخته
- بهره وری
- پروژه
- عمومی
- پــایتــون
- مطالعه
- كاهش دادن
- رگرسیون
- منابع
- REST
- نتایج
- دویدن
- در حال اجرا
- مقیاس
- مقیاس گذاری
- علم
- دانشمندان
- سلسله
- تنظیم
- محیط
- اشتراک گذاری
- به اشتراک گذاشته شده
- ساده
- کوچک
- So
- حل
- سرعت
- خرج کردن
- هزینه
- چرخش
- انشعاب
- SQL
- صحنه
- شروع
- آغاز شده
- ارقام
- داستان
- جریان
- هدف
- آزمون
- تفکر
- زمان
- بالا
- لمس
- آموزش
- معامله
- معاملات
- محاکمه
- آموزش
- ui
- us
- کاربران
- مجازی
- انبار کالا
- هفته
- چه شده است
- در داخل
- مهاجرت کاری
- کارگران
- گردش کار
- با این نسخهها کار
- نوشته
- X
- سال