Xây dựng đường ống học máy bằng Snowflake và Dask
Trong bài đăng này, tôi muốn chia sẻ một số công cụ mà tôi đã khám phá gần đây và cho bạn thấy cách tôi sử dụng chúng và cách chúng giúp cải thiện hiệu quả quy trình làm việc của tôi. Hai người tôi sẽ nói đến cụ thể là Snowflake và Dask. Hai công cụ rất khác nhau nhưng lại bổ sung cho nhau, đặc biệt là một phần của Vòng đời ML.
By Daniel Foley, Nhà khoa học dữ liệu
Giới thiệu
Gần đây, tôi đã cố gắng tìm ra những cách tốt hơn để cải thiện quy trình làm việc của mình với tư cách là một nhà khoa học dữ liệu. Tôi có xu hướng dành một phần thời gian kha khá để lập mô hình và xây dựng ETL trong công việc của mình. Điều này có nghĩa là ngày càng nhiều tôi cần dựa vào các công cụ để xử lý các tập dữ liệu lớn một cách đáng tin cậy và hiệu quả. Tôi nhanh chóng nhận ra rằng việc sử dụng gấu trúc để thao tác các tập dữ liệu này không phải lúc nào cũng là một cách tiếp cận tốt và điều này đã thúc đẩy tôi xem xét các lựa chọn thay thế khác.
Trong bài đăng này, tôi muốn chia sẻ một số công cụ mà tôi đã khám phá gần đây và cho bạn thấy cách tôi sử dụng chúng và cách chúng giúp cải thiện hiệu quả quy trình làm việc của tôi. Hai người tôi sẽ nói đến cụ thể là Snowflake và Dask. Hai công cụ rất khác nhau nhưng lại bổ sung cho nhau, đặc biệt là một phần của Vòng đời ML. Tôi hy vọng rằng sau khi đọc bài đăng này, bạn sẽ hiểu rõ Snowflake và Dask là gì, cách chúng có thể được sử dụng hiệu quả và có thể bắt đầu và vận hành các trường hợp sử dụng của riêng bạn.
Cụ thể hơn, tôi muốn chỉ cho bạn cách bạn có thể xây dựng đường ống ETL bằng cách sử dụng Snowflake và Python để tạo dữ liệu đào tạo cho một tác vụ học máy. Sau đó, tôi muốn giới thiệu Dask và Mây sao Thổ và chỉ cho bạn cách bạn có thể tận dụng quá trình xử lý song song trên đám mây để thực sự tăng tốc quá trình đào tạo ML để bạn có thể tăng năng suất của mình với tư cách là một nhà khoa học dữ liệu.
Xây dựng ETL bằng Snowflake và Python
Trước khi chúng ta bắt đầu viết mã, tôi nên giải thích ngắn gọn hơn về Snowflake là gì. Đây là một câu hỏi mà tôi đã hỏi gần đây khi nhóm của tôi quyết định bắt đầu sử dụng nó. Ở cấp độ cao, nó là một kho dữ liệu trên đám mây. Sau khi chơi với nó một lúc, tôi nhận ra sức mạnh của nó. Tôi nghĩ đối với tôi, một trong những tính năng hữu ích nhất là các kho ảo mà bạn có thể sử dụng. Kho ảo cung cấp cho bạn quyền truy cập vào cùng một dữ liệu nhưng hoàn toàn độc lập với các kho ảo khác nên tài nguyên máy tính không được chia sẻ giữa các nhóm. Điều này đã được chứng minh là rất hữu ích vì nó loại bỏ bất kỳ khả năng xảy ra các vấn đề về hiệu suất do những người dùng khác thực hiện các truy vấn trong ngày gây ra. Điều này đã dẫn đến ít thất vọng hơn và lãng phí thời gian chờ đợi các truy vấn chạy.
Vì chúng ta sẽ sử dụng Snowflake nên tôi sẽ trình bày ngắn gọn cách bạn có thể thiết lập nó và bắt đầu tự mình thử nghiệm nó. Chúng ta cần làm những việc sau:
- Thiết lập tài khoản Snowflake
- Nhận dữ liệu của chúng tôi vào Snowflake
- Viết và kiểm tra các truy vấn của chúng tôi bằng SQL và giao diện người dùng Snowflake
- Viết một lớp Python có thể thực thi các truy vấn của chúng tôi để tạo tập dữ liệu cuối cùng của chúng tôi để lập mô hình
Thiết lập tài khoản dễ dàng như đăng ký dùng thử miễn phí trang mạng. Sau khi hoàn thành, bạn có thể tải xuống snowsql CLI tại đây. Điều này sẽ giúp bạn dễ dàng thêm dữ liệu vào Snowflake. Sau khi làm theo các bước này, chúng tôi có thể thử và kết nối với Snowflake bằng thông tin đăng nhập của chúng tôi và dòng lệnh.
snowsql -a <account_name> -u <user_name>
Bạn có thể tìm thấy tên tài khoản của mình trong URL khi đăng nhập vào giao diện người dùng Snowflake. Nó sẽ trông giống như sau: xxxxx.europe-west2.gcp. Được rồi, hãy chuyển sang bước tiếp theo và lấy dữ liệu của chúng ta vào Snowflake. Có một số bước chúng ta cần làm ở đây, cụ thể là:
- Tạo kho ảo của chúng tôi
- Tạo cơ sở dữ liệu
- Xác định và tạo bảng của chúng tôi
- Tạo bảng dàn cho các tệp CSV của chúng tôi
- Sao chép dữ liệu vào bảng của chúng tôi
May mắn thay, điều này không quá khó và chúng ta có thể làm điều này hoàn toàn bằng cách sử dụng snowsql CLI. Đối với dự án này, tôi sẽ sử dụng một bộ dữ liệu nhỏ hơn tôi muốn nhưng rất tiếc, tôi không thể sử dụng bất kỳ dữ liệu nào của công ty mình và có thể khá khó khăn để tìm bộ dữ liệu lớn phù hợp trực tuyến. Tuy nhiên, tôi đã tìm thấy một số dữ liệu giao dịch từ Dunnhumby được cung cấp miễn phí trên Kaggle. Chỉ dành cho những cú hích, mặc dù tôi tạo một tập dữ liệu tổng hợp lớn hơn nhiều bằng cách sử dụng dữ liệu này để kiểm tra xem Dask xử lý thách thức tốt như thế nào so với sklearn.
Trước hết, chúng ta cần thiết lập một kho ảo và một cơ sở dữ liệu bằng cách sử dụng các lệnh sau trong giao diện người dùng Snowflake.
tạo or thay thế kho analytics_wh với
kho_size = ”X-SMALL”
auto_suspend = 180
auto_resume = true
ban đầu_suspended = true;
tạo or thay thế cơ sở dữ liệu ngu xuẩn;
Dữ liệu của chúng tôi bao gồm 6 CSV mà chúng tôi sẽ chuyển đổi thành 6 bảng. Tôi sẽ không mất quá nhiều thời gian để xem qua tập dữ liệu vì bài đăng này thiên về sử dụng Snowflake và Dask hơn là diễn giải dữ liệu.
Dưới đây là các lệnh chúng ta có thể sử dụng để tạo bảng của mình. Tất cả những gì bạn cần biết trước là bạn sẽ làm việc với những cột và kiểu dữ liệu nào.
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);
Bây giờ chúng ta đã tạo các bảng, chúng ta có thể bắt đầu suy nghĩ về cách lấy dữ liệu vào chúng. Đối với điều này, chúng tôi sẽ cần phân loại tệp CSV của mình. Về cơ bản, đây chỉ là một bước trung gian để Snowflake có thể tải trực tiếp các tệp từ giai đoạn của chúng tôi vào các bảng của chúng tôi. Chúng ta có thể sử dụng PUT lệnh để đặt các tệp cục bộ trong vùng của chúng tôi và sau đó SAO CHÉP VÀO lệnh để hướng dẫn Snowflake nơi đặt dữ liệu này.
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;
Để kiểm tra nhanh, bạn có thể chạy lệnh này để kiểm tra xem có gì trong vùng dàn dựng.
ls @dunnhumby.public.dunnhumby_stage;
Bây giờ chúng ta chỉ cần sao chép dữ liệu vào các bảng của mình bằng cách sử dụng các truy vấn bên dưới. Bạn có thể thực thi những điều này trong giao diện người dùng Snowflake hoặc trong dòng lệnh sau khi đăng nhập vào 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=’”’);
Được, tuyệt vời, với bất kỳ may mắn nào, chúng tôi có dữ liệu của chúng tôi trong bảng của chúng tôi trước tiên hãy thử. Ồ, giá như nó chỉ đơn giản như vậy, toàn bộ quá trình này khiến tôi phải mất vài lần thử để làm cho đúng (hãy cẩn thận với những thứ sai chính tả). Hy vọng rằng, bạn có thể làm theo cùng với điều này và tốt để đi. Chúng ta đang tiến gần hơn đến những thứ thú vị nhưng các bước trên là một phần quan trọng của quy trình, vì vậy hãy đảm bảo bạn hiểu từng bước này.
Viết Pipeline của chúng tôi trong SQL
Trong bước tiếp theo này, chúng tôi sẽ viết các truy vấn để tạo mục tiêu, các tính năng của chúng tôi và cuối cùng tạo ra một tập dữ liệu đào tạo. Một cách tiếp cận để tạo tập dữ liệu để lập mô hình là đọc dữ liệu này vào bộ nhớ và sử dụng gấu trúc để tạo các tính năng mới và nối tất cả các khung dữ liệu lại với nhau. Đây thường là cách bạn thấy trên Kaggle và trong các hướng dẫn trực tuyến khác. Vấn đề với điều này là nó không hiệu quả lắm, đặc biệt là khi bạn đang làm việc với bất kỳ bộ dữ liệu nào có kích thước hợp lý. Vì lý do này, tốt hơn hết là bạn nên thuê ngoài công việc nặng nhọc như Snowflake để xử lý các bộ dữ liệu khổng lồ cực kỳ tốt và có thể sẽ giúp bạn tiết kiệm rất nhiều thời gian. Tôi sẽ không dành nhiều thời gian để đi sâu vào các chi tiết cụ thể của tập dữ liệu của chúng tôi ở đây vì nó không thực sự quan trọng đối với những gì tôi đang cố gắng hiển thị. Tuy nhiên, nói chung, bạn sẽ muốn dành một lượng thời gian đáng kể để khám phá và hiểu dữ liệu của mình trước khi bắt đầu lập mô hình. Mục tiêu của các truy vấn này sẽ là xử lý trước dữ liệu và tạo một số tính năng đơn giản mà sau này chúng ta có thể sử dụng trong các mô hình của mình.
Định nghĩa mục tiêu
Rõ ràng, một thành phần quan trọng của học máy có giám sát là xác định một mục tiêu thích hợp để dự đoán. Đối với trường hợp sử dụng của chúng tôi, chúng tôi sẽ dự đoán thời gian ngừng hoạt động bằng cách tính toán liệu người dùng có thực hiện một lượt truy cập khác trong vòng hai tuần sau một tuần kết thúc hay không. Lựa chọn 2 tuần là khá tùy ý và sẽ phụ thuộc vào vấn đề cụ thể mà chúng tôi đang cố gắng giải quyết nhưng chúng ta hãy cứ cho rằng nó ổn cho dự án này. Nói chung, bạn sẽ muốn phân tích cẩn thận khách hàng của mình để hiểu sự phân bổ khoảng cách giữa các lượt truy cập để đi đến định nghĩa phù hợp về churn.
Ý tưởng chính ở đây là đối với mỗi bảng, chúng tôi muốn có một hàng cho mỗi hộ_mục chứa các giá trị cho mỗi đối tượng địa lý của chúng tôi.
Tính năng Chiến dịch
Tính năng giao dịch
Dưới đây, chúng tôi tạo một số chỉ số đơn giản dựa trên thống kê tổng hợp như giá trị trung bình, giá trị tối đa và độ lệch chuẩn.
Đặc điểm nhân khẩu học
Tập dữ liệu này có rất nhiều dữ liệu bị thiếu vì vậy tôi quyết định sử dụng tính toán ở đây. Có rất nhiều kỹ thuật cho dữ liệu bị thiếu từ việc loại bỏ dữ liệu bị thiếu đến các phương pháp áp đặt nâng cao. Tôi vừa tạo ra cuộc sống dễ dàng cho bản thân ở đây và thay thế các giá trị còn thiếu bằng chế độ. Tôi không nhất thiết khuyên bạn nên áp dụng cách tiếp cận này nói chung vì hiểu lý do tại sao dữ liệu này bị thiếu là thực sự quan trọng trong việc quyết định cách xử lý nó nhưng với mục đích của ví dụ này, tôi sẽ tiếp tục và thực hiện cách tiếp cận dễ dàng. Trước tiên, chúng tôi tính toán chế độ cho từng tính năng của chúng tôi và sau đó sử dụng kết hợp để thay thế từng hàng bằng chế độ nếu thiếu dữ liệu.
Dữ liệu đào tạo
Cuối cùng, chúng tôi xây dựng một truy vấn cho dữ liệu đào tạo của mình bằng cách kết hợp các bảng chính của chúng tôi lại với nhau và kết thúc bằng một bảng chứa các đặc điểm mục tiêu, chiến dịch, giao dịch và nhân khẩu học của chúng tôi mà chúng tôi có thể sử dụng để xây dựng mô hình.
Như một phần ngắn gọn sang một bên, đối với những người muốn tìm hiểu thêm về các tính năng và sắc thái của Snowflake, tôi sẽ giới thiệu cuốn sách sau: Sách dạy nấu ăn bông tuyết. Tôi bắt đầu đọc cuốn sách này và nó có đầy đủ thông tin thực sự hữu ích về cách sử dụng Snowflake và đi vào chi tiết hơn nhiều so với những gì tôi làm ở đây.
Mã Python cho ETL
Phần cuối cùng chúng tôi yêu cầu cho ETL này là viết một tập lệnh để thực thi nó. Bây giờ, điều này chỉ thực sự bắt buộc nếu bạn có kế hoạch chạy một ETL như thế này thường xuyên nhưng đây là một phương pháp hay và giúp việc chạy ETL khi cần thiết dễ dàng hơn nhiều.
Hãy thảo luận ngắn gọn về các thành phần chính của lớp EtlTraining của chúng tôi. Lớp học của chúng tôi lấy một đầu vào là cuối tuần. Điều này là do cách dữ liệu được xác định trong tập dữ liệu của chúng tôi nhưng thông thường, điều này sẽ ở định dạng ngày tương ứng với ngày giới hạn mà chúng tôi muốn chọn để tạo dữ liệu đào tạo.
Chúng tôi khởi tạo một danh sách các truy vấn của mình để chúng tôi có thể dễ dàng lặp lại các truy vấn này và thực thi chúng. Chúng tôi cũng tạo một từ điển chứa các tham số mà chúng tôi chuyển đến kết nối Snowflake của chúng tôi. Ở đây chúng tôi sử dụng các biến môi trường mà chúng tôi đã thiết lập trong Đám mây Sao Thổ. Đây là hướng dẫn về cách thực hiện việc này. Không quá khó để kết nối với Snowflake, tất cả những gì chúng ta cần làm là sử dụng Snowflake và chuyển vào từ điển thông tin đăng nhập của chúng tôi. Chúng tôi triển khai điều này trong phương thức kết nối Snowflake và trả về kết nối này dưới dạng một thuộc tính.
Để làm cho các truy vấn này chạy dễ dàng hơn một chút, tôi lưu từng truy vấn dưới dạng biến chuỗi python trong tệp ml_query_pipeline.py. Phương thức execute_etl thực hiện chính xác những gì nó nói trên hộp thiếc. Chúng tôi lặp lại từng truy vấn, định dạng, thực thi và kết thúc bằng cách đóng kết nối Snowflake.
Để chạy ETL này, chúng ta có thể chỉ cần gõ các lệnh bên dưới vào thiết bị đầu cuối. (trong đó ml_pipeline là tên của tập lệnh ở trên.)
python -m ml_pipeline -w 102 -j ‘train’
Nói một cách ngắn gọn sang một bên, có thể bạn sẽ muốn chạy một ETL như thế này theo định kỳ. Ví dụ: nếu bạn muốn đưa ra các dự đoán hàng ngày thì bạn sẽ cần tạo một tập dữ liệu như thế này mỗi ngày để chuyển cho mô hình của mình, do đó bạn có thể xác định khách hàng nào của mình có khả năng bỏ qua. Tôi sẽ không đi vào chi tiết vấn đề này ở đây nhưng trong công việc của tôi, chúng tôi sử dụng Airflow để sắp xếp các ETL của mình, vì vậy tôi khuyên bạn nên kiểm tra nó nếu bạn quan tâm. Trên thực tế, gần đây tôi đã mua một cuốn sách 'Đường ống dữ liệu với Apache Airflow'mà tôi nghĩ là tuyệt vời và thực sự đưa ra một số ví dụ và lời khuyên vững chắc về cách sử dụng luồng không khí.
Dask và mô hình hóa
Bây giờ chúng ta đã xây dựng xong đường ống dữ liệu, chúng ta có thể bắt đầu nghĩ đến việc lập mô hình. Mục tiêu chính khác mà tôi có cho bài đăng này là làm nổi bật những ưu điểm của việc sử dụng Dask như một phần của quá trình phát triển ML và cho các bạn thấy nó dễ sử dụng như thế nào.
Đối với phần này của dự án, tôi cũng sử dụng Mây sao Thổ đó là một công cụ thực sự tuyệt vời mà tôi đã xem gần đây cho phép chúng tôi khai thác sức mạnh của Dask trên một nhóm máy tính trong đám mây. Những ưu điểm chính của việc sử dụng Saturn đối với tôi là việc chia sẻ công việc của bạn thực sự dễ dàng, cực kỳ đơn giản để mở rộng máy tính của bạn bất cứ khi nào bạn cần và nó có tùy chọn cấp miễn phí. Phát triển mô hình nói chung là một trường hợp sử dụng thực sự tốt cho Dask vì chúng tôi thường muốn đào tạo một loạt các mô hình khác nhau và xem cái nào hoạt động tốt nhất. Chúng ta có thể làm điều này càng nhanh càng tốt vì chúng ta có nhiều thời gian hơn để tập trung vào các khía cạnh quan trọng khác của việc phát triển mô hình. Tương tự như Snowflake, bạn chỉ cần đăng ký tại đây và bạn có thể rất nhanh chóng tạo ra một phiên bản của phòng thí nghiệm Jupyter và tự mình bắt đầu thử nghiệm với nó.
Bây giờ, tôi nhận ra tại thời điểm này, tôi đã đề cập đến Dask một vài lần nhưng chưa bao giờ thực sự giải thích nó là gì. Vì vậy, hãy để tôi dành một chút thời gian để cung cấp cho bạn một cái nhìn tổng quan rất cao về Dask và tại sao tôi nghĩ nó thật tuyệt vời. Rất đơn giản, Dask là một thư viện python tận dụng tính toán song song để cho phép bạn xử lý và thực hiện các hoạt động trên các tập dữ liệu rất lớn. Và, phần tốt nhất là, nếu bạn đã quen thuộc với Python, thì Dask nên rất đơn giản vì cú pháp rất giống nhau.
Biểu đồ dưới đây nêu bật các thành phần chính của Dask.
nguồn: Tài liệu Dask
Bộ sưu tập cho phép chúng tôi tạo một biểu đồ các tác vụ mà sau đó có thể được thực thi trên nhiều máy tính. Một số cấu trúc dữ liệu này có thể nghe khá quen thuộc như mảng và khung dữ liệu và chúng tương tự như những gì bạn sẽ tìm thấy trong python nhưng có một số khác biệt quan trọng. Ví dụ, bạn có thể nghĩ về một khung dữ liệu Dask như một loạt các khung dữ liệu gấu trúc được xây dựng theo cách cho phép chúng ta thực hiện các thao tác song song.
Tiếp tục từ các bộ sưu tập, chúng tôi có bộ lập lịch. Sau khi chúng tôi tạo biểu đồ nhiệm vụ, bộ lập lịch trình sẽ xử lý phần còn lại cho chúng tôi. Nó quản lý quy trình làm việc và gửi các tác vụ này đến một máy duy nhất hoặc phân phối chúng trên một cụm. Hy vọng rằng điều đó cung cấp cho bạn một cái nhìn tổng quan rất ngắn gọn về cách hoạt động của Dask. Để biết thêm thông tin, tôi khuyên bạn nên xem tài liệu hướng dẫn hoặc này cuốn sách. Cả hai đều là những nguồn rất tốt để đào sâu hơn về chủ đề này.
Mã Python để lập mô hình
Khi lập mô hình, tôi có xu hướng sử dụng một số lượng nhỏ các thuật toán mà tôi sẽ luôn thử trước. Điều này nói chung sẽ cho tôi một ý tưởng tốt về những gì có thể phù hợp với vấn đề cụ thể mà tôi gặp phải. Các mô hình này là Logistic Regression, Random Forest và GradientBoosting. Theo kinh nghiệm của tôi, khi làm việc với dữ liệu dạng bảng, các thuật toán này thường sẽ cho bạn kết quả khá tốt. Dưới đây, chúng tôi xây dựng một đường dẫn mô hình sklearn bằng cách sử dụng 3 mô hình này. Các mô hình chính xác mà chúng tôi sử dụng ở đây không thực sự quan trọng vì đường ống sẽ hoạt động cho bất kỳ mô hình phân loại sklearn nào, đây chỉ là sở thích của tôi.
Không cần thêm lời khuyên, hãy đi sâu vào mã. May mắn thay, chúng tôi đã thuê ngoài phần lớn quá trình tiền xử lý của mình cho Snowflake, vì vậy chúng tôi không phải lo lắng về dữ liệu đào tạo của mình ở đây nhưng chúng tôi sẽ thêm một vài bước bổ sung bằng cách sử dụng đường ống sklearn.
Đoạn mã đầu tiên bên dưới hiển thị quy trình khi sử dụng sklearn. Lưu ý rằng tập dữ liệu của chúng tôi là một khung dữ liệu gấu trúc cũ thuần túy và các bước tiền xử lý của chúng tôi đều được thực hiện bằng phương pháp sklearn. Không có gì đặc biệt khác thường xảy ra ở đây. Chúng tôi đang đọc dữ liệu của mình từ bảng do Snowflake ETL của chúng tôi tạo ra và chuyển dữ liệu này vào một đường ống sklearn. Các bước mô hình thông thường áp dụng ở đây. Chúng tôi chia tập dữ liệu thành đào tạo và kiểm tra và thực hiện một số xử lý trước, cụ thể là áp dụng các giá trị bị thiếu bằng cách sử dụng giá trị trung bình, chia tỷ lệ dữ liệu và mã hóa một lần dữ liệu phân loại của chúng tôi. Tôi là một fan hâm mộ lớn của đường ống sklearn và về cơ bản sử dụng chúng bất cứ khi nào tôi phát triển các mô hình ngày nay, chúng thực sự tạo điều kiện cho mã rõ ràng và ngắn gọn.
Đường ống này hoạt động như thế nào trên tập dữ liệu có khoảng 2 triệu hàng? Chà, việc chạy mô hình này mà không cần điều chỉnh siêu thông số mất khoảng 34 phút. Ouch, hơi chậm. Bạn có thể tưởng tượng điều này sẽ mất bao lâu nếu chúng ta muốn thực hiện bất kỳ loại điều chỉnh siêu thông số nào. Ok, không lý tưởng lắm nhưng hãy xem cách Dask xử lý thử thách.
Mã Python Dask ML
Mục tiêu của chúng tôi ở đây là xem liệu chúng tôi có thể đánh bại đường ống sklearn ở trên hay không, cảnh báo spoiler, chúng tôi chắc chắn có thể. Điều thú vị về Dask là rào cản gia nhập khi bạn đã quen thuộc với python là khá thấp. Chúng tôi có thể thiết lập và chạy đường ống này trong Dask chỉ với một vài thay đổi.
Thay đổi đầu tiên mà bạn có thể sẽ nhận thấy là chúng tôi có một số mặt hàng nhập khẩu khác nhau. Một trong những điểm khác biệt chính giữa đường dẫn này và đường ống trước đó là chúng tôi sẽ sử dụng khung dữ liệu Dask thay vì khung dữ liệu gấu trúc để đào tạo mô hình của chúng tôi. Bạn có thể coi khung dữ liệu Dask như một loạt các khung dữ liệu gấu trúc, nơi chúng ta có thể thực hiện tính toán trên từng khung dữ liệu cùng một lúc. Đây là cốt lõi của sự song song của Dask và là điều sẽ giảm thời gian đào tạo cho đường ống này.
Chú ý chúng tôi sử dụng @ dask.delayed như một người trang trí cho của chúng tôi tải_đào_tạo_dữ_liệu hàm số. Điều này hướng dẫn Dask song song hóa chức năng này cho chúng ta.
Chúng tôi cũng sẽ nhập một số phương pháp tiền xử lý và đường ống từ Dask và quan trọng nhất, chúng tôi sẽ cần nhập SaturnCluster sẽ cho phép chúng tôi tạo một cụm để đào tạo các mô hình của chúng tôi. Một điểm khác biệt chính khác với mã này là chúng tôi sử dụng dask.persist sau khi phân chia thử nghiệm tàu của chúng tôi. Trước thời điểm này, không có chức năng nào của chúng tôi thực sự được tính toán do đánh giá lười biếng của Dask. Một khi chúng tôi sử dụng phương thức Kiên trì, mặc dù chúng tôi đang yêu cầu Dask gửi dữ liệu của chúng tôi đến các worker và thực hiện các tác vụ chúng tôi đã tạo cho đến thời điểm này và để các đối tượng này trên cụm.
Cuối cùng, chúng tôi đào tạo các mô hình của mình bằng phương pháp trì hoãn. Một lần nữa, điều này cho phép chúng tôi tạo đường dẫn của mình một cách lười biếng. Đường ống không được thực thi cho đến khi chúng tôi đạt được mã này:
fit_pipelines = dask.compute(*pipelines_)
Lần này, chúng tôi chỉ mất khoảng 10 phút để chạy đường dẫn này trên cùng một tập dữ liệu. Đó là tốc độ tăng theo hệ số 3.4, không quá tồi. Bây giờ, nếu chúng tôi muốn, chúng tôi có thể tăng tốc độ này hơn nữa bằng cách mở rộng tài nguyên máy tính của chúng tôi chỉ bằng một nút bấm ở Sao Thổ.
Triển khai Pipeline của chúng tôi
Tôi đã đề cập trước đó rằng bạn có thể sẽ muốn chạy một đường ống như thế này khá thường xuyên bằng cách sử dụng một cái gì đó như luồng không khí. Điều đó xảy ra là nếu bạn không muốn gặp rắc rối ban đầu khi thiết lập mọi thứ cho luồng không khí, Saturn Cloud cung cấp một giải pháp thay thế đơn giản với Jobs. Công việc cho phép chúng tôi đóng gói mã của mình và chạy nó theo khoảng thời gian đều đặn hoặc khi cần thiết. Tất cả những gì bạn cần làm là chuyển đến một dự án hiện có và nhấp vào tạo công việc. Khi chúng tôi làm điều đó, nó sẽ giống như sau:
nguồn: Saturn
Từ đây, tất cả những gì chúng ta cần làm là đảm bảo các tệp python của chúng tôi ở trên nằm trong thư mục trong hình ảnh và chúng tôi có thể nhập lệnh python ở trên
python -m ml_pipeline -w 102 -j 'train'
Chúng tôi cũng có thể thiết lập lịch trình bằng cú pháp cron để chạy ETL hàng ngày nếu chúng tôi muốn. Đối với những người quan tâm, đây là một Hướng Dẫn điều đó đi vào tất cả các nitty-gritty.
Kết luận và rút ra
Chà, chúng tôi đã kết thúc dự án của mình vào thời điểm này. Bây giờ rõ ràng là tôi đã bỏ qua một số phần chính của chu trình phát triển ML chẳng hạn như điều chỉnh siêu tham số và triển khai mô hình của chúng tôi nhưng có lẽ tôi sẽ để lại điều đó cho một ngày khác. Tôi có nghĩ bạn nên thử Dask không? Tôi không phải là chuyên gia nhưng từ những gì tôi đã thấy cho đến nay, nó chắc chắn có vẻ thực sự hữu ích và tôi rất hào hứng khi thử nghiệm nhiều hơn với nó và tìm thêm cơ hội để kết hợp nó vào công việc hàng ngày của tôi với tư cách là một nhà khoa học dữ liệu. Hy vọng rằng bạn thấy điều này hữu ích và bạn cũng có thể thấy một số ưu điểm của Snowflake và Dask và bạn sẽ bắt đầu tự mình thử nghiệm chúng.
Thông tin
- Đường ống dữ liệu với Apache Airflow
- Sách dạy nấu ăn bông tuyết
- Khoa học dữ liệu ở quy mô với Python và Dask
- Coursera: SQL cho Khoa học Dữ liệu
Một số bài viết khác của tôi mà bạn có thể thấy thú vị
Hãy xây dựng một đường ống dữ liệu truyền trực tuyến
Mô hình hóa hỗn hợp Gaussian (GMM)
Phương pháp tiếp cận của Bayes đối với dự báo chuỗi thời gian
Lưu ý: Một số liên kết trong bài đăng này là liên kết liên kết.
Tiểu sử: Daniel Foley là một cựu Nhà kinh tế đã trở thành Nhà khoa học dữ liệu làm việc trong ngành công nghiệp trò chơi di động.
Nguyên. Đăng lại với sự cho phép.
Liên quan:
Nguồn: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- truy cập
- Tài khoản
- thêm vào
- Lợi thế
- tư vấn
- Liên kết
- thuật toán
- Tất cả
- đàn bà gan dạ
- Apache
- KHU VỰC
- xung quanh
- tự động
- BEST
- Một chút
- xây dựng
- Xây dựng
- xăn lên
- Chiến dịch
- trường hợp
- gây ra
- thách thức
- thay đổi
- kiểm tra
- phân loại
- gần gũi hơn
- đám mây
- mã
- Lập trình
- thành phần
- Tính
- máy tính
- máy tính
- Coursera
- Tạo
- Credentials
- khách hàng
- dữ liệu
- khoa học dữ liệu
- nhà khoa học dữ liệu
- tập dữ liệu
- kho dữ liệu
- Cơ sở dữ liệu
- ngày
- nhiều
- học kĩ càng
- nhân khẩu học
- chi tiết
- phát triển
- Phát triển
- ĐÃ LÀM
- Giám đốc
- hiệu quả
- Kỹ sư
- Môi trường
- thử nghiệm
- Tính năng
- Cuối cùng
- cuối
- Tên
- Tập trung
- theo
- định dạng
- Miễn phí
- Full
- chức năng
- chơi game
- Ngành công nghiệp game
- Tổng Quát
- tốt
- GPU
- tuyệt vời
- hướng dẫn
- tại đây
- Cao
- Đánh dấu
- Độ đáng tin của
- Hướng dẫn
- HTTPS
- lớn
- ý tưởng
- xác định
- hình ảnh
- Tăng lên
- ngành công nghiệp
- Thông tin
- thông tin
- các vấn đề
- IT
- Việc làm
- việc làm
- tham gia
- nhảy
- Key
- lớn
- LEARN
- học tập
- Cấp
- Thư viện
- Dòng
- Danh sách
- tải
- địa phương
- dài
- học máy
- Metrics
- triệu
- ML
- di động
- Chơi game di động
- kiểu mẫu
- di chuyển
- cụ thể là
- Các tính năng mới
- Cung cấp
- Trực tuyến
- Hoạt động
- Tùy chọn
- Nền tảng khác
- hiệu suất
- Rất nhiều
- bài viết
- quyền lực
- Dự đoán
- Sản xuất
- năng suất
- dự án
- công khai
- Python
- Reading
- giảm
- hồi quy
- Thông tin
- REST của
- Kết quả
- chạy
- chạy
- Quy mô
- mở rộng quy mô
- Khoa học
- các nhà khoa học
- Loạt Sách
- định
- thiết lập
- Chia sẻ
- chia sẻ
- Đơn giản
- nhỏ
- So
- động SOLVE
- tốc độ
- tiêu
- Chi
- Quay
- chia
- SQL
- Traineeship
- Bắt đầu
- bắt đầu
- số liệu thống kê
- Những câu chuyện
- trực tuyến
- Mục tiêu
- thử nghiệm
- Suy nghĩ
- thời gian
- hàng đầu
- chạm
- Hội thảo
- giao dịch
- Giao dịch
- thử nghiệm
- hướng dẫn
- ui
- us
- Người sử dụng
- ảo
- Kho
- tuần
- Là gì
- ở trong
- Công việc
- công nhân
- quy trình làm việc
- công trinh
- viết
- X
- năm