การสร้างท่อการเรียนรู้ของเครื่องโดยใช้ Snowflake และ Dask
ในโพสต์นี้ ฉันต้องการแชร์เครื่องมือบางอย่างที่ฉันได้สำรวจเมื่อเร็วๆ นี้ และแสดงให้คุณเห็นว่าฉันใช้งานอย่างไร และเครื่องมือเหล่านี้ช่วยปรับปรุงประสิทธิภาพของเวิร์กโฟลว์ของฉันได้อย่างไร สองคนที่ฉันจะพูดถึงโดยเฉพาะคือ Snowflake และ Dask เครื่องมือสองอย่างที่แตกต่างกันมาก แต่เป็นเครื่องมือที่ช่วยเสริมซึ่งกันและกันโดยเฉพาะซึ่งเป็นส่วนหนึ่งของ ML Lifecycle
By แดเนียลโฟลีย์, นักวิทยาศาสตร์ข้อมูล
บทนำ
เมื่อเร็วๆ นี้ ฉันพยายามหาวิธีที่ดีกว่าในการปรับปรุงเวิร์กโฟลว์ของฉันในฐานะนักวิทยาศาสตร์ข้อมูล ฉันมักจะใช้เวลาพอสมควรในการสร้างแบบจำลองและสร้าง ETL ในงานของฉัน นี่หมายความว่าฉันต้องพึ่งพาเครื่องมือมากขึ้นเรื่อยๆ เพื่อจัดการกับชุดข้อมูลขนาดใหญ่ได้อย่างน่าเชื่อถือและมีประสิทธิภาพ ฉันตระหนักได้อย่างรวดเร็วว่าการใช้แพนด้าในการจัดการชุดข้อมูลเหล่านี้ไม่ใช่แนวทางที่ดีเสมอไป และสิ่งนี้ทำให้ฉันต้องมองหาทางเลือกอื่น
ในโพสต์นี้ ฉันต้องการแชร์เครื่องมือบางอย่างที่ฉันได้สำรวจเมื่อเร็วๆ นี้ และแสดงให้คุณเห็นว่าฉันใช้งานอย่างไร และเครื่องมือเหล่านี้ช่วยปรับปรุงประสิทธิภาพของเวิร์กโฟลว์ของฉันได้อย่างไร สองคนที่ฉันจะพูดถึงโดยเฉพาะคือ Snowflake และ Dask เครื่องมือสองอย่างที่แตกต่างกันมาก แต่เป็นเครื่องมือที่ช่วยเสริมซึ่งกันและกันโดยเฉพาะซึ่งเป็นส่วนหนึ่งของ ML Lifecycle ความหวังของฉันคือหลังจากอ่านโพสต์นี้ คุณจะมีความเข้าใจที่ดีว่า Snowflake และ Dask คืออะไร ใช้งานได้อย่างมีประสิทธิภาพและสามารถเริ่มต้นใช้งานกรณีการใช้งานของคุณเองได้อย่างไร
โดยเฉพาะอย่างยิ่ง ฉันต้องการแสดงให้คุณเห็นว่าคุณสามารถสร้างไปป์ไลน์ ETL โดยใช้ Snowflake และ Python เพื่อสร้างข้อมูลการฝึกอบรมสำหรับงานการเรียนรู้ของเครื่องได้อย่างไร ฉันอยากจะแนะนำ Dask และ เมฆดาวเสาร์ และแสดงให้คุณเห็นว่าคุณสามารถใช้ประโยชน์จากการประมวลผลแบบคู่ขนานในระบบคลาวด์เพื่อเพิ่มความเร็วในกระบวนการฝึกอบรม ML ได้อย่างไร เพื่อให้คุณเพิ่มประสิทธิภาพการทำงานในฐานะนักวิทยาศาสตร์ข้อมูล
การสร้าง ETL ใน Snowflake และ Python
ก่อนที่เราจะเข้าสู่การเข้ารหัส ฉันควรอธิบายสั้น ๆ ว่า Snowflake คืออะไร นี่เป็นคำถามที่ฉันเพิ่งถามเมื่อทีมของฉันตัดสินใจเริ่มใช้งาน ในระดับสูงจะเป็นคลังข้อมูลในระบบคลาวด์ หลังจากลองเล่นดูซักพักฉันก็รู้ว่ามันทรงพลังขนาดไหน ฉันคิดว่าหนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดคือคลังสินค้าเสมือนที่คุณสามารถใช้ได้ คลังสินค้าเสมือนช่วยให้คุณเข้าถึงข้อมูลเดียวกันได้ แต่ไม่ต้องพึ่งพาคลังสินค้าเสมือนอื่นๆ เลย ดังนั้นจึงไม่มีการแชร์ทรัพยากรในการประมวลผลระหว่างทีม สิ่งนี้พิสูจน์แล้วว่ามีประโยชน์มากเพราะช่วยขจัดปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้นจากผู้ใช้รายอื่นที่ดำเนินการค้นหาตลอดทั้งวัน ส่งผลให้ความหงุดหงิดน้อยลงและเสียเวลารอคิวรีทำงาน
เนื่องจากเราจะใช้ Snowflake ฉันจะสรุปคร่าวๆ ว่าคุณจะตั้งค่าและเริ่มทดลองกับ Snowflake ได้อย่างไร เราต้องทำสิ่งต่อไปนี้:
- ตั้งค่าบัญชี Snowflake
- รับข้อมูลของเราลงใน Snowflake
- เขียนและทดสอบการสืบค้นของเราโดยใช้ SQL และ Snowflake UI
- เขียนคลาส Python ที่สามารถดำเนินการค้นหาของเราเพื่อสร้างชุดข้อมูลสุดท้ายสำหรับการสร้างแบบจำลอง
การตั้งค่าบัญชีนั้นง่ายพอๆ กับการลงทะเบียนทดลองใช้งานฟรีบนของพวกเขา เว็บไซต์. เมื่อคุณทำเสร็จแล้วคุณสามารถดาวน์โหลด 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 UI
สร้าง or แทนที่ การวิเคราะห์คลังสินค้า_wh กับ
warehouse_size=”X-SMALL”
auto_suspend=180
auto_resume=จริง
initial_suspended=true;
สร้าง or แทนที่ ฐานข้อมูล ดันน์ฮัมบี้;
ข้อมูลของเราประกอบด้วย CSV 6 รายการ ซึ่งเราจะแปลงเป็น 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 สามารถโหลดไฟล์จากสเตจของเราลงในตารางของเราได้โดยตรง เราสามารถใช้ PUT คำสั่งให้ใส่ไฟล์ในเครื่องในสเตจของเราแล้ว คัดลอกลงใน คำสั่งให้ 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 ซึ่งจัดการชุดข้อมูลขนาดใหญ่ได้ดีมาก และจะช่วยคุณประหยัดเวลาได้มาก ฉันจะไม่ใช้เวลามากในการดำดิ่งลงไปในข้อมูลเฉพาะของชุดข้อมูลของเราที่นี่ เนื่องจากมันไม่สำคัญจริงๆ สำหรับสิ่งที่ฉันพยายามแสดง อย่างไรก็ตาม โดยทั่วไปแล้ว คุณจะต้องใช้เวลาพอสมควรในการสำรวจและทำความเข้าใจข้อมูลของคุณก่อนที่จะเริ่มสร้างแบบจำลอง เป้าหมายของการค้นหาเหล่านี้คือการประมวลผลข้อมูลล่วงหน้าและสร้างคุณสมบัติง่ายๆ ที่เราสามารถนำมาใช้ในแบบจำลองของเราได้ในภายหลัง
คำจำกัดความของเป้าหมาย
เห็นได้ชัดว่าองค์ประกอบสำคัญของการเรียนรู้ของเครื่องภายใต้การดูแลคือการกำหนดเป้าหมายที่เหมาะสมเพื่อคาดการณ์ สำหรับกรณีการใช้งานของเรา เราจะคาดการณ์การเลิกราโดยการคำนวณว่าผู้ใช้ทำการเยี่ยมชมอีกภายในสองสัปดาห์หลังจากสัปดาห์ที่ปิดรับหรือไม่ ทางเลือกของ 2 สัปดาห์นั้นค่อนข้างไม่แน่นอนและจะขึ้นอยู่กับปัญหาเฉพาะที่เรากำลังพยายามแก้ไข แต่สมมติว่ามันใช้ได้สำหรับโครงการนี้ โดยทั่วไป คุณต้องการวิเคราะห์ลูกค้าของคุณอย่างรอบคอบเพื่อทำความเข้าใจการกระจายในช่องว่างระหว่างการเข้าชมเพื่อให้ได้คำจำกัดความที่เหมาะสมของการเลิกรา
แนวคิดหลักในที่นี้คือ สำหรับแต่ละตาราง เราต้องการมีหนึ่งแถวต่อ Household_key ที่มีค่าสำหรับแต่ละคุณลักษณะของเรา
คุณลักษณะของแคมเปญ
คุณสมบัติการทำธุรกรรม
ด้านล่างนี้ เราสร้างตัวชี้วัดอย่างง่ายตามสถิติรวม เช่น ค่าเฉลี่ย ค่าสูงสุด และส่วนเบี่ยงเบนมาตรฐาน
คุณสมบัติทางประชากร
ชุดข้อมูลนี้มีข้อมูลที่ขาดหายไปจำนวนมาก ดังนั้นฉันจึงตัดสินใจใช้การใส่ข้อมูลที่นี่ มีเทคนิคมากมายสำหรับข้อมูลที่ขาดหายไปจากการทิ้งข้อมูลที่ขาดหายไป ไปจนถึงวิธีการใส่ข้อมูลขั้นสูง ฉันเพิ่งทำให้ชีวิตง่ายขึ้นสำหรับตัวเองที่นี่ และแทนที่ค่าที่หายไปด้วยโหมด ฉันคงไม่แนะนำให้ใช้วิธีนี้โดยทั่วไป เพราะการทำความเข้าใจว่าเหตุใดข้อมูลจึงขาดหายไปจึงมีความสำคัญอย่างยิ่งในการตัดสินใจว่าจะจัดการกับมันอย่างไร แต่สำหรับจุดประสงค์ของตัวอย่างนี้ ฉันจะดำเนินการตามแนวทางง่ายๆ ต่อไป ก่อนอื่นเราจะคำนวณโหมดสำหรับคุณลักษณะแต่ละอย่าง จากนั้นใช้การรวมเพื่อแทนที่แต่ละแถวด้วยโหมดหากข้อมูลหายไป
ข้อมูลการฝึกอบรม
สุดท้าย เราสร้างแบบสอบถามสำหรับข้อมูลการฝึกอบรมของเราโดยการรวมตารางหลักของเราเข้าด้วยกัน และจบลงด้วยตารางที่มีเป้าหมาย แคมเปญ ธุรกรรม และคุณลักษณะด้านประชากรศาสตร์ที่เราสามารถใช้เพื่อสร้างแบบจำลองได้
โดยย่อ สำหรับผู้ที่สนใจเรียนรู้เพิ่มเติมเกี่ยวกับคุณลักษณะและความแตกต่างของ Snowflake ฉันจะแนะนำหนังสือต่อไปนี้: ตำราอาหารเกล็ดหิมะ. ฉันเริ่มอ่านหนังสือนี้และเต็มไปด้วยข้อมูลที่เป็นประโยชน์มากเกี่ยวกับวิธีใช้ Snowflake และมีรายละเอียดมากกว่าที่ฉันทำที่นี่
รหัส Python สำหรับ ETL
สิ่งสุดท้ายที่เราต้องการสำหรับ ETL นี้คือการเขียนสคริปต์เพื่อดำเนินการ ตอนนี้ สิ่งนี้จำเป็นจริงๆ เท่านั้นหากคุณวางแผนที่จะใช้งาน ETL แบบนี้เป็นประจำ แต่นี่เป็นแนวปฏิบัติที่ดีและช่วยให้เรียกใช้ ETL ได้ง่ายขึ้นเมื่อจำเป็น
มาพูดคุยกันสั้นๆ เกี่ยวกับองค์ประกอบหลักของคลาส EtlTraining ของเรา ชั้นเรียนของเรารับข้อมูลหนึ่งรายการซึ่งเป็นสัปดาห์ที่ปิดรับ นี่เป็นเพราะวิธีการกำหนดข้อมูลในชุดข้อมูลของเรา แต่โดยปกติ ข้อมูลนี้จะอยู่ในรูปแบบวันที่ที่สอดคล้องกับวันที่ตัดยอดที่เราต้องการเลือกเพื่อสร้างข้อมูลการฝึก
เราเริ่มต้นรายการการสืบค้นข้อมูลของเราเพื่อให้เราสามารถวนรอบสิ่งเหล่านี้และดำเนินการได้อย่างง่ายดาย นอกจากนี้เรายังสร้างพจนานุกรมที่มีพารามิเตอร์ซึ่งเราส่งต่อไปยังการเชื่อมต่อเกล็ดหิมะของเรา ที่นี่เราใช้ตัวแปรสภาพแวดล้อมที่เราตั้งค่าไว้ใน Saturn Cloud Here เป็นแนวทางในการทำสิ่งนี้ การเชื่อมต่อกับ Snowflake นั้นไม่ยากเกินไป สิ่งที่เราต้องทำคือใช้ตัวเชื่อมต่อ Snowflake และส่งต่อในพจนานุกรมของข้อมูลประจำตัวของเรา เราใช้สิ่งนี้ในวิธีการเชื่อมต่อ Snowflake และส่งคืนการเชื่อมต่อนี้เป็นแอตทริบิวต์
เพื่อให้การสืบค้นเหล่านี้ทำงานได้ง่ายขึ้นเล็กน้อย ฉันได้บันทึกแต่ละการสืบค้นเป็นตัวแปรสตริงหลามในไฟล์ ml_query_pipeline.py เมธอด execute_etl จะทำตามที่เขียนไว้ในกระป๋อง เราวนรอบการสืบค้นข้อมูลแต่ละรายการ จัดรูปแบบ ดำเนินการ และปิดการเชื่อมต่อ Snowflake
ในการเรียกใช้ ETL นี้ เราสามารถพิมพ์คำสั่งด้านล่างลงในเทอร์มินัลได้ (โดยที่ ml_pipeline คือชื่อของสคริปต์ด้านบน)
python -m ml_pipeline -w 102 -j ‘train’
กล่าวโดยย่อ คุณอาจต้องการเรียกใช้ ETL แบบนี้เป็นระยะๆ ตัวอย่างเช่น หากคุณต้องการคาดการณ์รายวัน คุณจะต้องสร้างชุดข้อมูลแบบนี้ทุกวันเพื่อส่งต่อไปยังโมเดลของคุณ เพื่อให้คุณระบุได้ว่าลูกค้ารายใดของคุณมีแนวโน้มที่จะเลิกใช้งาน ฉันจะไม่ลงรายละเอียดที่นี่ แต่ในงานของฉัน เราใช้ Airflow เพื่อจัดเตรียม ETL ของเรา ดังนั้นฉันขอแนะนำให้ตรวจสอบหากคุณสนใจ อันที่จริงฉันเพิ่งซื้อหนังสือ 'ไปป์ไลน์ข้อมูลด้วย Apache Airflow' ซึ่งฉันคิดว่าดีมากและให้ตัวอย่างที่ชัดเจนและคำแนะนำเกี่ยวกับวิธีการใช้กระแสลม
Dask และการสร้างแบบจำลอง
ตอนนี้เราได้สร้างไปป์ไลน์ข้อมูลแล้ว เราสามารถเริ่มคิดถึงการสร้างแบบจำลองได้ เป้าหมายหลักอื่น ๆ ที่ฉันมีสำหรับโพสต์นี้คือเพื่อเน้นข้อดีของการใช้ Dask เป็นส่วนหนึ่งของกระบวนการพัฒนา ML และแสดงให้คุณเห็นว่าใช้งานง่ายเพียงใด
สำหรับส่วนนี้ของโครงการ ฉันยังใช้ เมฆดาวเสาร์ ซึ่งเป็นเครื่องมือที่ดีจริงๆ ที่ฉันเพิ่งพบเมื่อไม่นานนี้ ซึ่งช่วยให้เราควบคุมพลังของ Dask ข้ามกลุ่มคอมพิวเตอร์ในระบบคลาวด์ได้ ข้อได้เปรียบหลักของการใช้ Saturn สำหรับฉันคือมันง่ายมากที่จะแบ่งปันงานของคุณ ง่ายสุด ๆ ในการขยายขนาดการคำนวณของคุณในเวลาที่คุณต้องการ และมันมีตัวเลือกระดับฟรี การพัฒนาโมเดลโดยทั่วไปเป็นกรณีการใช้งานที่ดีจริงๆ สำหรับ Dask เนื่องจากเรามักจะต้องการฝึกอบรมโมเดลต่างๆ มากมายและดูว่าแบบไหนทำงานได้ดีที่สุด ยิ่งเราทำสิ่งนี้ได้เร็วเท่าไหร่ก็ยิ่งดีเท่านั้น เนื่องจากเรามีเวลามากขึ้นที่จะให้ความสำคัญกับประเด็นสำคัญอื่นๆ ของการพัฒนาแบบจำลอง แอปที่คล้ายกับ Snowflake you just need to sign up โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม และคุณสามารถสร้างตัวอย่างของ Jupyter lab และเริ่มทดลองด้วยตัวเองได้อย่างรวดเร็ว
ตอนนี้ ฉันรู้แล้วว่า ณ จุดนี้ฉันได้พูดถึง Dask สองสามครั้งแล้ว แต่ไม่เคยอธิบายจริงๆ ว่ามันคืออะไร ให้ฉันใช้เวลาสักครู่เพื่อให้คุณเห็นภาพรวมระดับสูงของ Dask และทำไมฉันถึงคิดว่ามันยอดเยี่ยม พูดง่ายๆ ก็คือ Dask เป็นไลบรารี่ python ที่ใช้ประโยชน์จากการคำนวณแบบขนานเพื่อให้คุณสามารถประมวลผลและดำเนินการกับชุดข้อมูลขนาดใหญ่ได้ และส่วนที่ดีที่สุดคือ หากคุณคุ้นเคยกับ Python อยู่แล้ว Dask ควรจะตรงไปตรงมามาก เนื่องจากไวยากรณ์คล้ายกันมาก
กราฟด้านล่างเน้นองค์ประกอบหลักของ Dask
ที่มา: เอกสาร Dask
คอลเล็กชันช่วยให้เราสร้างกราฟของงานซึ่งสามารถดำเนินการได้ในคอมพิวเตอร์หลายเครื่อง โครงสร้างข้อมูลบางส่วนเหล่านี้อาจฟังดูค่อนข้างคุ้นเคย เช่น อาร์เรย์และกรอบข้อมูล และมีความคล้ายคลึงกับสิ่งที่คุณพบใน python แต่มีความแตกต่างที่สำคัญบางประการ ตัวอย่างเช่น คุณอาจคิดว่า Dask data frame เป็นกลุ่มของ data frames ของ pandas ที่สร้างขึ้นในลักษณะที่ช่วยให้เราดำเนินการแบบคู่ขนานกัน
ต่อจากคอลเลกชัน เรามีตัวกำหนดตารางเวลา เมื่อเราสร้างกราฟงานแล้ว ตัวจัดกำหนดการจะจัดการส่วนที่เหลือให้เรา จัดการเวิร์กโฟลว์และส่งงานเหล่านี้ไปยังเครื่องเดียวหรือกระจายไปทั่วคลัสเตอร์ หวังว่านี่จะทำให้คุณเห็นภาพรวมคร่าวๆ เกี่ยวกับวิธีการทำงานของ Dask สำหรับข้อมูลเพิ่มเติม ฉันขอแนะนำให้ตรวจสอบ เอกสาร หรือนี้ หนังสือ. ทั้งสองเป็นแหล่งข้อมูลที่ดีมากในการเจาะลึกในหัวข้อนี้
รหัสหลามสำหรับการสร้างแบบจำลอง
เมื่อสร้างแบบจำลอง ฉันมักจะมีอัลกอริธึมที่ใช้งานได้จำนวนน้อยซึ่งฉันจะลองใช้ก่อนเสมอ โดยทั่วไปสิ่งนี้จะทำให้ฉันมีความคิดที่ดีว่าสิ่งใดที่เหมาะกับปัญหาเฉพาะที่ฉันมี โมเดลเหล่านี้ได้แก่ Logistic Regression, Random Forest และ GradientBoosting จากประสบการณ์ของผม เมื่อทำงานกับข้อมูลแบบตาราง อัลกอริทึมเหล่านี้มักจะให้ผลลัพธ์ที่ดีทีเดียว ด้านล่างเราสร้างไปป์ไลน์การสร้างแบบจำลอง sklearn โดยใช้ 3 โมเดลเหล่านี้ โมเดลที่แน่นอนที่เราใช้ที่นี่ไม่สำคัญนัก เนื่องจากไปป์ไลน์ควรใช้ได้กับโมเดลการจัดหมวดหมู่ sklearn ใดๆ นี่เป็นเพียงความชอบของฉัน
เพื่อไม่ให้เป็นการเสียเวลา เรามาดำดิ่งลงไปในโค้ดกัน โชคดีที่เราเอาต์ซอร์สการประมวลผลล่วงหน้าส่วนใหญ่ของเราไปที่ Snowflake ดังนั้นเราจึงไม่ต้องยุ่งกับข้อมูลการฝึกอบรมของเรามากเกินไปที่นี่ แต่เราจะเพิ่มขั้นตอนเพิ่มเติมสองสามขั้นตอนโดยใช้ไปป์ไลน์ sklearn
ข้อมูลโค้ดแรกด้านล่างแสดงไปป์ไลน์เมื่อใช้ sklearn โปรดสังเกตว่าชุดข้อมูลของเราเป็นกรอบข้อมูลแพนด้าแบบเก่าธรรมดา และขั้นตอนการประมวลผลล่วงหน้าของเราทั้งหมดดำเนินการโดยใช้วิธีการของ sklearn ไม่มีอะไรเป็นพิเศษเกิดขึ้นที่นี่ เรากำลังอ่านข้อมูลของเราจากตารางที่สร้างโดย Snowflake ETL และส่งผ่านไปยังไปป์ไลน์ sklearn ขั้นตอนการสร้างแบบจำลองปกติใช้ที่นี่ เราแบ่งชุดข้อมูลออกเป็นการฝึกและทดสอบ และทำการประมวลผลล่วงหน้า กล่าวคือ กำหนดค่าที่ขาดหายไปโดยใช้ค่ามัธยฐาน ปรับขนาดข้อมูล และเข้ารหัสข้อมูลหมวดหมู่ของเราแบบด่วนครั้งเดียว ฉันเป็นแฟนตัวยงของไปป์ไลน์ sklearn และโดยทั่วไปจะใช้มันทุกครั้งที่ฉันพัฒนาโมเดลในปัจจุบัน พวกเขาอำนวยความสะดวกโค้ดที่สะอาดและรัดกุมจริงๆ
ไปป์ไลน์นี้ทำงานอย่างไรกับชุดข้อมูลที่มีประมาณ 2 ล้านแถว การใช้งานโมเดลนี้โดยไม่มีการปรับค่าไฮเปอร์พารามิเตอร์จะใช้เวลาประมาณ 34 นาที อุ๊ย ช้าหน่อย คุณสามารถจินตนาการได้ว่าจะใช้เวลานานเท่าใดหากเราต้องการปรับแต่งไฮเปอร์พารามิเตอร์ประเภทใดก็ได้ โอเค ไม่เหมาะ แต่มาดูกันว่า Dask จะจัดการกับความท้าทายอย่างไร
รหัส Dask ML Python
เป้าหมายของเราที่นี่คือเพื่อดูว่าเราสามารถเอาชนะไปป์ไลน์ sklearn ด้านบนได้หรือไม่ เตือนสปอยเลอร์ เราทำได้แน่นอน สิ่งที่ยอดเยี่ยมเกี่ยวกับ Dask ก็คืออุปสรรคในการเข้าเมื่อคุณคุ้นเคยกับ python อยู่แล้วนั้นค่อนข้างต่ำ เราสามารถทำให้ไปป์ไลน์นี้ใช้งานได้ใน Dask โดยมีการเปลี่ยนแปลงเพียงเล็กน้อย
การเปลี่ยนแปลงครั้งแรกที่คุณอาจสังเกตเห็นคือเรามีการนำเข้าที่แตกต่างกัน ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างไปป์ไลน์นี้กับไปป์ไลน์ก่อนหน้านี้คือเราจะใช้ data frame Dask แทน data frame ของ pandas เพื่อฝึกโมเดลของเรา คุณสามารถนึกถึงดาต้าเฟรม Dask เป็นพวงของดาต้าดาต้าเฟรมของแพนด้า ซึ่งเราสามารถทำการคำนวณในแต่ละอันได้ในเวลาเดียวกัน นี่คือแก่นของความขนานของ Dask และเป็นสิ่งที่จะลดเวลาการฝึกอบรมสำหรับไปป์ไลน์นี้
สังเกตว่าเราใช้ @dask.ล่าช้า เป็นมัณฑนากรของเรา load_training_data การทำงาน. สิ่งนี้สั่งให้ Dask ทำฟังก์ชันนี้ให้ขนานกันสำหรับเรา
เราจะนำเข้าวิธีการประมวลผลล่วงหน้าและไปป์ไลน์จาก Dask และที่สำคัญที่สุด เราจะต้องนำเข้า SaturnCluster ซึ่งจะช่วยให้เราสร้างคลัสเตอร์สำหรับฝึกโมเดลของเราได้ ความแตกต่างที่สำคัญอีกประการหนึ่งของรหัสนี้คือเราใช้ dask.คงอยู่ หลังจากการทดสอบรถไฟของเราแยกออก ก่อนหน้านั้น ฟังก์ชันของเราไม่ได้ถูกคำนวณจริง ๆ เนื่องจากการประเมินที่ขี้เกียจของ 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 เช่น การปรับพารามิเตอร์ไฮเปอร์พารามิเตอร์ และการปรับใช้โมเดลของเรา แต่บางทีฉันจะปล่อยให้วันอื่น ฉันคิดว่าคุณควรลอง Dask หรือไม่ ฉันไม่ใช่ผู้เชี่ยวชาญไม่ว่าด้วยวิธีใด แต่จากสิ่งที่ฉันได้เห็นมา ดูเหมือนว่ามีประโยชน์จริงๆ และฉันตื่นเต้นมากที่จะทดลองกับมันมากขึ้น และหาโอกาสมากขึ้นที่จะรวมมันเข้ากับงานประจำวันของฉันในฐานะนักวิทยาศาสตร์ข้อมูล หวังว่าคุณจะพบว่าสิ่งนี้มีประโยชน์ และคุณสามารถเห็นข้อดีบางประการของ Snowflake และ Dask และคุณจะเริ่มทดลองกับพวกมันด้วยตัวเอง
แหล่งข้อมูล
- ไปป์ไลน์ข้อมูลด้วย Apache Airflow
- ตำราอาหารเกล็ดหิมะ
- วิทยาศาสตร์ข้อมูลตามขนาดด้วย Python และ Dask
- Coursera: SQL สำหรับ Data Science
โพสต์อื่น ๆ ของฉันที่คุณอาจสนใจ
มาสร้างไปป์ไลน์ข้อมูลการสตรีมกันเถอะ
การสร้างแบบจำลองส่วนผสมแบบเกาส์เซียน (GMM)
แนวทางเบย์เซียนในการพยากรณ์อนุกรมเวลา
หมายเหตุ: ลิงค์บางส่วนในโพสต์นี้เป็นลิงค์พันธมิตร
Bio: แดเนียลโฟลีย์ เป็นอดีตนักเศรษฐศาสตร์ที่ผันตัวมาเป็น Data Scientist ซึ่งทำงานในอุตสาหกรรมเกมมือถือ
Original. โพสต์ใหม่โดยได้รับอนุญาต
ที่เกี่ยวข้อง
ที่มา: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- เข้า
- ลงชื่อเข้าใช้
- เพิ่มเติม
- ความได้เปรียบ
- คำแนะนำ
- เข้าร่วม
- อัลกอริทึม
- ทั้งหมด
- อเมซอน
- อาปาเช่
- AREA
- รอบ
- รถยนต์
- ที่ดีที่สุด
- บิต
- สร้าง
- การก่อสร้าง
- พวง
- รณรงค์
- กรณี
- ที่เกิดจาก
- ท้าทาย
- เปลี่ยนแปลง
- การตรวจสอบ
- การจัดหมวดหมู่
- ใกล้ชิด
- เมฆ
- รหัส
- การเข้ารหัส
- ส่วนประกอบ
- คำนวณ
- คอมพิวเตอร์
- การคำนวณ
- Coursera
- การสร้าง
- หนังสือรับรอง
- ลูกค้า
- ข้อมูล
- วิทยาศาสตร์ข้อมูล
- นักวิทยาศาสตร์ข้อมูล
- ชุดข้อมูล
- คลังข้อมูล
- ฐานข้อมูล
- วัน
- จัดการ
- การเรียนรู้ลึก ๆ
- ประชากรศาสตร์
- รายละเอียด
- พัฒนา
- พัฒนาการ
- DID
- ผู้อำนวยการ
- อย่างมีประสิทธิภาพ
- วิศวกร
- สิ่งแวดล้อม
- การทดลอง
- คุณสมบัติ
- ในที่สุด
- ปลาย
- ชื่อจริง
- โฟกัส
- ปฏิบัติตาม
- รูป
- ฟรี
- เต็ม
- ฟังก์ชัน
- การเล่นเกม
- อุตสาหกรรมเกม
- General
- ดี
- GPUs
- ยิ่งใหญ่
- ให้คำแนะนำ
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- จุดสูง
- เน้น
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- HTTPS
- ใหญ่
- ความคิด
- แยกแยะ
- ภาพ
- เพิ่ม
- อุตสาหกรรม
- ข้อมูล
- ข้อมูล
- ปัญหา
- IT
- การสัมภาษณ์
- งาน
- ร่วม
- กระโดด
- คีย์
- ใหญ่
- เรียนรู้
- การเรียนรู้
- ชั้น
- ห้องสมุด
- Line
- รายการ
- โหลด
- ในประเทศ
- นาน
- เรียนรู้เครื่อง
- ตัวชี้วัด
- ล้าน
- ML
- โทรศัพท์มือถือ
- เกมมือถือ
- แบบ
- ย้าย
- คือ
- คุณสมบัติใหม่
- เสนอ
- ออนไลน์
- การดำเนินการ
- ตัวเลือกเสริม (Option)
- อื่นๆ
- การปฏิบัติ
- ความอุดมสมบูรณ์
- โพสต์
- อำนาจ
- การคาดการณ์
- ผลิต
- ผลผลิต
- โครงการ
- สาธารณะ
- หลาม
- การอ่าน
- ลด
- ถดถอย
- แหล่งข้อมูล
- REST
- ผลสอบ
- วิ่ง
- วิ่ง
- ขนาด
- ปรับ
- วิทยาศาสตร์
- นักวิทยาศาสตร์
- ชุด
- ชุด
- การตั้งค่า
- Share
- ที่ใช้ร่วมกัน
- ง่าย
- เล็ก
- So
- แก้
- ความเร็ว
- ใช้จ่าย
- การใช้จ่าย
- สปิน
- แยก
- SQL
- ระยะ
- เริ่มต้น
- ข้อความที่เริ่ม
- สถิติ
- จำนวนชั้น
- ที่พริ้ว
- เป้า
- ทดสอบ
- คิด
- เวลา
- ด้านบน
- แตะ
- การฝึกอบรม
- การทำธุกรรม
- การทำธุรกรรม
- การทดลอง
- บทเรียน
- ui
- us
- ผู้ใช้
- เสมือน
- คลังสินค้า
- สัปดาห์
- ความหมายของ
- ภายใน
- งาน
- แรงงาน
- เวิร์กโฟลว์
- โรงงาน
- การเขียน
- X
- ปี