بناء خطوط أنابيب التعلم الآلي باستخدام ندفة الثلج و Dask
في هذا المنشور ، أرغب في مشاركة بعض الأدوات التي كنت أستكشفها مؤخرًا وأظهر لك كيف أستخدمها وكيف ساعدت في تحسين كفاءة سير العمل الخاص بي. سنتحدث عن الاثنين على وجه الخصوص هما Snowflake و Dask. أداتان مختلفتان تمامًا ولكنهما يكملان بعضهما البعض جيدًا خاصة كجزء من دورة حياة ML.
By دانيال فولي، عالم البيانات
المُقدّمة
كنت أحاول مؤخرًا العثور على طرق أفضل لتحسين سير عملي كعالم بيانات. أميل إلى قضاء جزء كبير من وقتي في تصميم النماذج وبناء ETLs في وظيفتي. وهذا يعني أنني بحاجة أكثر فأكثر إلى الاعتماد على الأدوات للتعامل بشكل موثوق وفعال مع مجموعات البيانات الكبيرة. سرعان ما أدركت أن استخدام الباندا للتلاعب بمجموعات البيانات هذه ليس دائمًا نهجًا جيدًا وهذا دفعني إلى البحث عن بدائل أخرى.
في هذا المنشور ، أرغب في مشاركة بعض الأدوات التي كنت أستكشفها مؤخرًا وأظهر لك كيف أستخدمها وكيف ساعدت في تحسين كفاءة سير العمل الخاص بي. سنتحدث عن الاثنين على وجه الخصوص هما Snowflake و Dask. أداتان مختلفتان تمامًا ولكنهما يكملان بعضهما البعض جيدًا خاصة كجزء من دورة حياة ML. آمل أنه بعد قراءة هذا المنشور ، سيكون لديك فهم جيد لماهية Snowflake و Dask ، وكيف يمكن استخدامهما بفعالية والقدرة على الاستعداد والتشغيل مع حالات الاستخدام الخاصة بك.
بشكل أكثر تحديدًا ، أريد أن أوضح لك كيف يمكنك إنشاء خط أنابيب ETL باستخدام Snowflake و Python لإنشاء بيانات التدريب لمهمة التعلم الآلي. ثم أود أن أقدم Dask و زحل سحابة ونوضح لك كيف يمكنك الاستفادة من المعالجة المتوازية في السحابة لتسريع عملية تدريب ML حتى تتمكن من زيادة إنتاجيتك كعالم بيانات.
بناء ETLs في Snowflake و Python
قبل أن ننتقل إلى البرمجة ، من الأفضل أن أشرح بإيجاز ما هو Snowflake. هذا سؤال طرحته مؤخرًا عندما قرر فريقي البدء في استخدامه. على مستوى عالٍ ، فهو مستودع بيانات في السحابة. بعد اللعب بها لفترة من الوقت ، أدركت مدى قوتها. أعتقد أن إحدى أكثر الميزات المفيدة هي المستودعات الافتراضية التي يمكنك استخدامها. يمنحك المستودع الافتراضي الوصول إلى نفس البيانات ولكنه مستقل تمامًا عن المستودعات الافتراضية الأخرى ، لذلك لا تتم مشاركة موارد الحساب عبر الفرق. لقد ثبت أن هذا مفيد للغاية لأنه يزيل أي مشكلات محتملة في الأداء بسبب المستخدمين الآخرين الذين ينفذون الاستعلامات على مدار اليوم. وقد أدى ذلك إلى تقليل الإحباط وإهدار الوقت في انتظار تشغيل الاستفسارات.
نظرًا لأننا سنستخدم Snowflake ، سأوضح بإيجاز كيف يمكنك إعدادها والبدء في تجربتها بنفسك. نحتاج إلى القيام بما يلي:
- احصل على حساب Snowflake
- احصل على بياناتنا في Snowflake
- اكتب واختبر استفساراتنا باستخدام SQL و Snowflake UI
- اكتب فئة بايثون يمكنها تنفيذ استعلاماتنا لإنشاء مجموعة البيانات النهائية الخاصة بنا للنمذجة
يعد إنشاء حساب سهلاً مثل التسجيل للحصول على نسخة تجريبية مجانية على موقع الكتروني. بمجرد الانتهاء من ذلك ، يمكنك تنزيل snowsql CLI هنا. هذا سيجعل من السهل إضافة البيانات إلى Snowflake. بعد اتباع هذه الخطوات ، يمكننا محاولة الاتصال بـ Snowflake باستخدام بيانات الاعتماد الخاصة بنا وسطر الأوامر.
snowsql -a <account_name> -u <user_name>
يمكنك العثور على اسم حسابك في عنوان URL عند تسجيل الدخول إلى Snowflake UI. يجب أن يبدو مثل هذا: xxxxx.europe-west2.gcp. حسنًا ، دعنا ننتقل إلى الخطوة التالية ونحصل على بياناتنا في Snowflake. هناك بضع خطوات يجب اتباعها هنا وهي:
- قم بإنشاء مستودعنا الافتراضي
- أنشئ قاعدة بيانات
- تحديد وإنشاء جداولنا
- قم بإنشاء جدول مرحلي لملفات CSV الخاصة بنا
- نسخ البيانات إلى جداولنا
لحسن الحظ ، هذا ليس صعبًا للغاية ويمكننا القيام بذلك بالكامل باستخدام snowsql CLI. بالنسبة لهذا المشروع ، سأستخدم مجموعة بيانات أصغر مما أريد ولكن لسوء الحظ ، لا يمكنني استخدام أي من بيانات شركتي وقد يكون من الصعب جدًا العثور على مجموعات بيانات مناسبة كبيرة عبر الإنترنت. ومع ذلك ، فقد وجدت بعض بيانات المعاملات من Dunnhumby والتي تتوفر مجانًا على Kaggle. فقط للركلات على الرغم من أنني أنشأت مجموعة بيانات تركيبية أكبر بكثير باستخدام هذه البيانات لاختبار مدى كفاءة Dask في التعامل مع التحدي مقارنةً بـ sklearn.
بادئ ذي بدء ، نحتاج إلى إنشاء مستودع افتراضي وقاعدة بيانات باستخدام الأوامر التالية في واجهة مستخدم Snowflake.
خلق or يحل محل تحليلات المستودع مع
Warehouse_size = "X-SMALL"
auto_suspend = 180
auto_resume = صحيح
في البداية_suspended = صحيح ؛
خلق or يحل محل قاعدة بيانات دنومبي.
تتكون بياناتنا من 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 UI أو في سطر الأوامر بعد تسجيل الدخول إلى 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 الذي يتعامل مع مجموعات البيانات الضخمة بشكل جيد للغاية وسيوفر لك على الأرجح قدرًا هائلاً من الوقت. لن أقضي الكثير من الوقت في الغوص في تفاصيل مجموعة البيانات الخاصة بنا هنا لأنها ليست حيوية حقًا لما أحاول إظهاره. بشكل عام ، على الرغم من ذلك ، قد ترغب في قضاء قدر كبير من الوقت في استكشاف وفهم بياناتك قبل البدء في النمذجة. سيكون الهدف من هذه الاستعلامات هو المعالجة المسبقة للبيانات وإنشاء بعض الميزات البسيطة التي يمكننا استخدامها لاحقًا في نماذجنا.
تعريف الهدف
من الواضح أن أحد المكونات الحيوية للتعلم الآلي الخاضع للإشراف هو تحديد هدف مناسب للتنبؤ به. بالنسبة لحالة الاستخدام الخاصة بنا ، سنتوقع حدوث اضطراب من خلال حساب ما إذا كان المستخدم يقوم بزيارة أخرى في غضون أسبوعين بعد أسبوع التوقف أم لا. يعد اختيار أسبوعين عشوائيًا وسيعتمد على المشكلة المحددة التي نحاول حلها ولكن دعنا نفترض فقط أنه جيد بالنسبة لهذا المشروع. بشكل عام ، قد ترغب في تحليل عملائك بعناية لفهم توزيع الفجوات بين الزيارات للوصول إلى تعريف مناسب للتخبط.
الفكرة الرئيسية هنا هي أنه لكل جدول نريد أن يكون هناك صف واحد لكل مفتاح أسرة يحتوي على قيم لكل ميزة من ميزاتنا.
ميزات الحملة
ميزات الصفقة
أدناه نقوم بإنشاء بعض المقاييس البسيطة بناءً على الإحصائيات المجمعة مثل المتوسط والانحراف الأقصى والانحراف المعياري.
الميزات الديموغرافية
تحتوي مجموعة البيانات هذه على الكثير من البيانات المفقودة ، لذا قررت استخدام التضمين هنا. هناك الكثير من التقنيات المتاحة للبيانات المفقودة من إسقاط البيانات المفقودة إلى طرق التضمين المتقدمة. لقد جعلت الحياة سهلة على نفسي هنا واستبدلت القيم المفقودة بالنمط. لا أوصي بالضرورة باتباع هذا النهج بشكل عام لأن فهم سبب فقدان هذه البيانات مهم حقًا في تحديد كيفية التعامل معها ، ولكن لأغراض هذا المثال ، سوف أمضي قدمًا وأتبع النهج السهل. نحسب أولاً الوضع لكل ميزة من ميزاتنا ثم نستخدم الاندماج لاستبدال كل صف بالوضع إذا كانت البيانات مفقودة.
بيانات التدريب
أخيرًا ، نقوم ببناء استعلام لبيانات التدريب لدينا من خلال ضم جداولنا الرئيسية معًا وينتهي بنا الأمر بجدول يحتوي على هدفنا وحملتنا ومعاملاتنا وميزاتنا الديموغرافية التي يمكننا استخدامها لبناء نموذج.
باختصار ، للراغبين في معرفة المزيد عن ميزات وفروق Snowflake ، أوصي بالكتاب التالي: كتاب الطبخ ندفة الثلج. لقد بدأت في قراءة هذا الكتاب وهو مليء بالمعلومات المفيدة حقًا حول كيفية استخدام Snowflake ويخوض في تفاصيل أكثر بكثير مما أفعله هنا.
كود بايثون لـ ETL
الجزء الأخير الذي نطلبه من ETL هذا هو كتابة نص لتنفيذه. الآن ، هذا مطلوب فقط إذا كنت تخطط لتشغيل ETL مثل هذا بانتظام ولكن هذه ممارسة جيدة وتجعل تشغيل ETL أسهل بكثير عند الحاجة.
دعنا نناقش بإيجاز المكونات الرئيسية لفصل EtlTraining. يأخذ فصلنا مدخلاً واحدًا وهو الأسبوع الأخير. يرجع ذلك إلى الطريقة التي يتم بها تحديد البيانات في مجموعة البيانات الخاصة بنا ، ولكن عادةً ما يكون هذا بتنسيق تاريخ يتوافق مع تاريخ القطع الذي نريد اختياره لإنشاء بيانات التدريب.
نقوم بتهيئة قائمة من استفساراتنا حتى نتمكن من تكرارها وتنفيذها بسهولة. نقوم أيضًا بإنشاء قاموس يحتوي على معلماتنا التي نمررها إلى اتصال Snowflake الخاص بنا. هنا نستخدم متغيرات البيئة التي أنشأناها في Saturn Cloud. هنا هو دليل حول كيفية القيام بذلك. ليس من الصعب جدًا الاتصال بـ Snowflake ، كل ما نحتاج إليه هو استخدام موصل Snowflake وتمرير بيانات الاعتماد في قاموسنا. نقوم بتنفيذ ذلك في طريقة اتصال Snowflake ونعيد هذا الاتصال كسمة.
لجعل تشغيل هذه الاستعلامات أسهل قليلاً ، أقوم بحفظ كل استعلام كمتغير سلسلة Python في ملف ml_query_pipeline.py. طريقة execute_etl تفعل بالضبط ما تقوله على القصدير. نقوم بإجراء حلقة من خلال كل استعلام وتنسيقه وتنفيذه والانتهاء من خلال إغلاق اتصال Snowflake.
لتشغيل ETL هذا ، يمكننا ببساطة كتابة الأوامر أدناه في Terminal. (حيث ml_pipeline هو اسم البرنامج النصي أعلاه.)
python -m ml_pipeline -w 102 -j ‘train’
باختصار ، قد ترغب في تشغيل ETL مثل هذا على فترات منتظمة. على سبيل المثال ، إذا كنت ترغب في عمل تنبؤات يومية ، فستحتاج إلى إنشاء مجموعة بيانات مثل هذه كل يوم لتمريرها إلى نموذجك حتى تتمكن من تحديد أي من عملائك من المحتمل أن يتخبط. لن أخوض في هذا بالتفصيل هنا ولكن في وظيفتي ، نستخدم Airflow لتنظيم ETLs الخاصة بنا ، لذا أوصي بمراجعتها إذا كنت مهتمًا. في الواقع ، لقد اشتريت مؤخرًا كتابًا "خطوط أنابيب البيانات مع تدفق هواء أباتشيوهو ما أعتقد أنه رائع ويعطي حقًا بعض الأمثلة القوية والنصائح حول كيفية استخدام تدفق الهواء.
داسك والنمذجة
الآن بعد أن تم بناء خط بياناتنا ، يمكننا البدء في التفكير في النمذجة. الهدف الرئيسي الآخر الذي أملكه لهذا المنشور هو تسليط الضوء على مزايا استخدام Dask كجزء من عملية تطوير ML وإظهار مدى سهولة استخدامه.
بالنسبة لهذا الجزء من المشروع ، استخدمت أيضًا زحل سحابة وهي أداة رائعة حقًا صادفتها مؤخرًا تسمح لنا بتسخير قوة Dask عبر مجموعة من أجهزة الكمبيوتر في السحابة. تتمثل المزايا الرئيسية لاستخدام Saturn بالنسبة لي في أنه من السهل حقًا مشاركة عملك ، وبساطة فائقة لتوسيع نطاق الحساب الخاص بك عندما تحتاج إليه ولديه خيار مستوى مجاني. يعد تطوير النموذج بشكل عام حالة استخدام جيدة حقًا لـ Dask لأننا نريد عادةً تدريب مجموعة من النماذج المختلفة ومعرفة ما هو الأفضل. كلما تمكنا من القيام بذلك بشكل أسرع ، كان ذلك أفضل لأن لدينا المزيد من الوقت للتركيز على الجوانب المهمة الأخرى لتطوير النموذج. على غرار Snowflake ، تحتاج فقط إلى التسجيل هنا ويمكنك إنشاء مثيل لـ Jupyter lab بسرعة كبيرة والبدء في تجربته بنفسك.
الآن ، أدركت في هذه المرحلة أنني ذكرت Dask عدة مرات لكنني لم أشرح ما هو عليه. لذا اسمحوا لي أن أتوقف لحظة لأقدم لكم نظرة عامة رفيعة المستوى عن Dask ولماذا أعتقد أنه رائع. ببساطة شديدة ، Dask هي مكتبة بيثون تستفيد من الحوسبة المتوازية للسماح لك بمعالجة وتنفيذ العمليات على مجموعات بيانات كبيرة جدًا. وأفضل جزء هو ، إذا كنت معتادًا بالفعل على لغة بايثون ، فيجب أن يكون داسك واضحًا جدًا لأن بناء الجملة متشابه جدًا.
يوضح الرسم البياني أدناه المكونات الرئيسية لـ Dask.
المصدر وثائق داسك
تسمح لنا المجموعات بإنشاء رسم بياني للمهام التي يمكن تنفيذها بعد ذلك عبر أجهزة كمبيوتر متعددة. ربما تبدو بعض هياكل البيانات هذه مألوفة جدًا مثل المصفوفات وإطارات البيانات وهي تشبه ما قد تجده في Python ولكن مع بعض الاختلافات المهمة. على سبيل المثال ، يمكنك التفكير في إطار بيانات Dask على أنه مجموعة من إطارات بيانات الباندا التي تم إنشاؤها بطريقة تسمح لنا بإجراء العمليات على التوازي.
الانتقال من المجموعات لدينا المجدول. بمجرد إنشاء الرسم البياني للمهمة ، يتولى المجدول الباقي لنا. يدير سير العمل ويرسل هذه المهام إلى جهاز واحد أو يوزعها عبر مجموعة. نأمل أن يمنحك هذا نظرة عامة موجزة جدًا عن كيفية عمل Dask. لمزيد من المعلومات ، أقترح التحقق من توثيق أو هذا كتاب. كلاهما موارد جيدة للغاية للتعمق في هذا الموضوع.
كود بايثون للنمذجة
عند النمذجة ، أميل إلى امتلاك عدد صغير من خوارزميات الانتقال التي سأجربها دائمًا أولاً. سيعطيني هذا بشكل عام فكرة جيدة عما قد يكون مناسبًا للمشكلة المحددة التي لدي. هذه النماذج هي الانحدار اللوجستي والغابة العشوائية وتعزيز التدرج. من واقع خبرتي ، عند العمل باستخدام البيانات المجدولة ، ستمنحك هذه الخوارزميات عادةً نتائج جيدة جدًا. أدناه نقوم ببناء خط أنابيب النمذجة sklearn باستخدام هذه النماذج الثلاثة. النماذج الدقيقة التي نستخدمها هنا ليست مهمة حقًا لأن خط الأنابيب يجب أن يعمل مع أي نموذج تصنيف sklearn ، هذا هو تفضيلي فقط.
بدون مزيد من اللغط ، دعنا نتعمق في الكود. لحسن الحظ ، قمنا بالاستعانة بمصادر خارجية لمعظم عمليات المعالجة المسبقة لدينا إلى Snowflake ، لذلك لا يتعين علينا العبث ببيانات التدريب الخاصة بنا كثيرًا هنا ولكننا سنضيف بضع خطوات إضافية باستخدام خطوط أنابيب sklearn.
يُظهر مقتطف الشفرة الأول أدناه خط الأنابيب عند استخدام sklearn. لاحظ أن مجموعة البيانات الخاصة بنا عبارة عن إطار بيانات قديم لحيوان الباندا ويتم تنفيذ جميع خطوات المعالجة المسبقة لدينا باستخدام أساليب sklearn. لا يوجد شيء خارج عن المألوف يحدث هنا. نحن نقرأ في بياناتنا من الجدول الذي تم إنتاجه بواسطة Snowflake ETL الخاص بنا ونقوم بتمرير هذا إلى خط أنابيب sklearn. تنطبق خطوات النمذجة المعتادة هنا. قمنا بتقسيم مجموعة البيانات إلى تدريب واختبار وإجراء بعض المعالجة المسبقة ، أي تحديد القيم المفقودة باستخدام الوسيط ، وقياس البيانات وتشفير البيانات الفئوية الخاصة بنا. أنا معجب كبير بخطوط أنابيب sklearn وأستخدمها بشكل أساسي كلما طورت نماذج في الوقت الحاضر ، فهي تسهل حقًا رمزًا واضحًا وموجزًا.
كيف يعمل خط الأنابيب هذا على مجموعة بيانات تضم حوالي 2 مليون صف؟ حسنًا ، يستغرق تشغيل هذا النموذج بدون أي ضبط للمعامل الفائق حوالي 34 دقيقة. أوه ، بطيء نوعًا ما. يمكنك أن تتخيل المدة التي سيستغرقها هذا الأمر إذا أردنا القيام بأي نوع من ضبط المعلمة الفائقة. حسنًا ، هذا ليس مثاليًا ولكن دعنا نرى كيف يتعامل Dask مع التحدي.
كود Dask ML Python
هدفنا هنا هو معرفة ما إذا كان بإمكاننا التغلب على خط أنابيب sklearn أعلاه ، تنبيه المفسد ، يمكننا بالتأكيد ذلك. الشيء الرائع في Dask هو أن حاجز الدخول عندما تكون معتادًا على Python منخفض جدًا. يمكننا تشغيل خط الأنابيب هذا وتشغيله في Dask مع بعض التغييرات فقط.
التغيير الأول الذي ربما ستلاحظه هو أن لدينا بعض الواردات المختلفة. أحد الاختلافات الرئيسية بين خط الأنابيب هذا والسابق هو أننا سنستخدم إطار بيانات Dask بدلاً من إطار بيانات الباندا لتدريب نموذجنا. يمكنك التفكير في إطار بيانات Dask على أنه مجموعة من إطارات بيانات الباندا حيث يمكننا إجراء عمليات حسابية على كل منها في نفس الوقت. هذا هو جوهر توازي داسك وهو ما سيقلل من وقت التدريب لخط الأنابيب هذا.
لاحظ أننا نستخدم تضمين التغريدة كديكور لدينا Load_training_data وظيفة. هذا يرشد Dask إلى موازاة هذه الوظيفة بالنسبة لنا.
سنقوم أيضًا باستيراد بعض طرق المعالجة المسبقة وخطوط الأنابيب من Dask والأهم من ذلك ، سنحتاج إلى استيراد SaturnCluster الذي سيسمح لنا بإنشاء مجموعة لتدريب نماذجنا. اختلاف رئيسي آخر مع هذا الرمز هو أننا نستخدم داسك بعد انقسام اختبار القطار لدينا. قبل هذه النقطة ، لم يتم حساب أي من وظائفنا بالفعل بسبب تقييم Dask البطيء. بمجرد استخدامنا للطريقة المستمرة على الرغم من أننا نطلب من Dask إرسال بياناتنا إلى العمال وتنفيذ المهام التي أنشأناها حتى هذه النقطة وترك هذه الكائنات في المجموعة.
أخيرًا ، نقوم بتدريب نماذجنا باستخدام طريقة التأخير. مرة أخرى ، يمكننا هذا من إنشاء خط الأنابيب الخاص بنا بطريقة كسولة. لا يتم تنفيذ خط الأنابيب حتى نصل إلى هذا الرمز:
fit_pipelines = dask.compute(*pipelines_)
هذه المرة ، استغرق الأمر منا حوالي 10 دقائق فقط لتشغيل خط الأنابيب هذا على نفس مجموعة البيانات بالضبط. هذا تسريع بمعامل 3.4 ، ليس رديئًا جدًا. الآن ، إذا أردنا ذلك ، يمكننا تسريع هذا أكثر من خلال توسيع نطاق مواردنا الحسابية بلمسة زر واحدة في زحل.
نشر خط الأنابيب لدينا
لقد ذكرت سابقًا أنك ربما ترغب في تشغيل خط أنابيب مثل هذا بانتظام باستخدام شيء مثل تدفق الهواء. يحدث فقط أنه إذا كنت لا تريد المتاعب الأولية لإعداد كل شيء لتدفق الهواء ، فإن Saturn Cloud يقدم بديلاً بسيطًا مع Jobs. تتيح لنا الوظائف تجميع التعليمات البرمجية الخاصة بنا وتشغيلها على فترات منتظمة أو حسب الحاجة. كل ما عليك فعله هو الذهاب إلى مشروع قائم والنقر على إنشاء وظيفة. بمجرد القيام بذلك ، يجب أن يبدو كما يلي:
المصدر سايتورن
من هنا ، كل ما نحتاج إلى فعله هو التأكد من أن ملفات python أعلاه موجودة في الدليل الموجود في الصورة ويمكننا إدخال أمر python أعلاه
python -m ml_pipeline -w 102 -j 'train'
يمكننا أيضًا إعداد جدول زمني باستخدام بناء جملة cron لتشغيل ETL على أساس يومي إذا أردنا. للمهتمين ، هنا ملف البرنامج التعليمي هذا يذهب إلى التفاصيل الجوهرية.
الاستنتاجات والوجبات الجاهزة
حسنًا ، لقد وصلنا إلى نهاية مشروعنا في هذه المرحلة. من الواضح الآن أنني تركت بعض الأجزاء الرئيسية من دورة تطوير ML مثل ضبط المعلمة الفائقة ونشر نموذجنا ، لكن ربما سأترك ذلك ليوم آخر. هل أعتقد أنك يجب أن تجرب داسك؟ لست خبيرًا بأي حال من الأحوال ، ولكن مما رأيته حتى الآن يبدو بالتأكيد مفيدًا حقًا وأنا متحمس جدًا لتجربة المزيد معه وإيجاد المزيد من الفرص لدمجه في عملي اليومي كعالم بيانات. نأمل أن تكون قد وجدت هذا مفيدًا ويمكنك أيضًا رؤية بعض مزايا Snowflake و Dask وستبدأ في تجربتها بنفسك.
الموارد
- خطوط أنابيب البيانات مع تدفق هواء أباتشي
- كتاب الطبخ ندفة الثلج
- علم البيانات على نطاق واسع باستخدام Python و Dask
- كورسيرا: SQL لعلوم البيانات
قد تجد بعض مشاركاتي الأخرى ممتعة
نهج بايزي للتنبؤ بالسلاسل الزمنية
ملاحظة: بعض الروابط في هذا المنشور هي روابط تابعة.
السيرة الذاتية: دانيال فولي هو خبير اقتصادي سابق تحول إلى عالم بيانات يعمل في صناعة الألعاب المحمولة.
أصلي. تم إعادة النشر بإذن.
هذا الموضوع ذو علاقة بـ:
المصدر: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- الوصول
- حسابي
- إضافي
- مميزات
- نصيحة
- التسويق بالعمولة
- خوارزميات
- الكل
- أمازون
- أباتشي
- المنطقة
- حول
- السيارات
- أفضل
- قطعة
- نساعدك في بناء
- ابني
- باقة
- الحملات
- الحالات
- تسبب
- تحدى
- تغيير
- تدقيق
- تصنيف
- أقرب
- سحابة
- الكود
- البرمجة
- عنصر
- إحصاء
- أجهزة الكمبيوتر
- الحوسبة
- كورسيرا
- خلق
- أوراق اعتماد
- العملاء
- البيانات
- علم البيانات
- عالم البيانات
- مجموعة البيانات
- مستودع البيانات
- قاعدة البيانات
- يوم
- صفقة
- التعلم العميق
- ديموغرافي
- التفاصيل
- تطوير
- التطوير التجاري
- فعل
- مدير المدارس
- كفاءة
- المهندسين
- البيئة
- تجربة
- المميزات
- أخيرا
- نهاية
- الاسم الأول
- تركز
- اتباع
- شكل
- مجانا
- بالإضافة إلى
- وظيفة
- الألعاب
- صناعة الألعاب
- العلاجات العامة
- خير
- وحدات معالجة الرسومات
- عظيم
- توجيه
- هنا
- مرتفع
- تسليط الضوء
- كيفية
- كيفية
- HTTPS
- ضخم
- فكرة
- تحديد
- صورة
- القيمة الاسمية
- العالمية
- info
- معلومات
- مسائل
- IT
- وظيفة
- المشــاريــع
- الانضمام
- قفز
- القفل
- كبير
- تعلم
- تعلم
- مستوى
- المكتبة
- خط
- لينكدين:
- قائمة
- تحميل
- محلي
- طويل
- آلة التعلم
- المقاييس
- مليون
- ML
- الجوال
- الألعاب المحمولة
- نموذج
- خطوة
- أي
- مزايا جديدة
- عروض
- online
- عمليات
- خيار
- أخرى
- أداء
- وفرة
- المنشورات
- قوة
- تنبؤات
- أنتج
- إنتاجية
- تنفيذ المشاريع
- جمهور
- بايثون
- نادي القراءة
- تخفيض
- تراجع
- الموارد
- REST
- النتائج
- يجري
- تشغيل
- حجم
- التحجيم
- علوم
- العلماء
- مسلسلات
- طقم
- ضبط
- مشاركة
- شاركت
- الاشارات
- صغير
- So
- حل
- سرعة
- أنفق
- الإنفاق
- غزل
- انقسم
- SQL
- المسرح
- بداية
- بدأت
- إحصائيات
- قصص
- متدفق
- الهدف
- تجربه بالعربي
- تفكير
- الوقت
- تيشرت
- تواصل
- قادة الإيمان
- صفقة
- المعاملات
- محاكمة
- الدروس
- ui
- us
- المستخدمين
- افتراضي
- المخزن
- أسبوع
- ما هي تفاصيل
- في غضون
- للعمل
- العمال
- سير العمل
- أعمال
- جاري الكتابة
- X
- سنوات