Snowpark برای Python به دانشمندان داده راه خوبی برای انجام برنامهنویسی به سبک DataFrame در برابر انبار داده Snowflake میدهد، از جمله توانایی راهاندازی خطوط لوله یادگیری ماشینی کامل برای اجرا در یک زمانبندی مکرر.
سال گذشته درباره هشت پایگاه داده نوشتم که از یادگیری ماشینی درون پایگاه داده پشتیبانی میکنند. یادگیری ماشین درون پایگاه داده مهم است زیرا پردازش یادگیری ماشین را به داده ها می رساند، که برای داده های بزرگ بسیار کارآمدتر است، نه اینکه دانشمندان داده را مجبور به استخراج زیرمجموعه های داده به جایی که آموزش و استنتاج یادگیری ماشین اجرا می شود. p>
این پایگاههای داده هرکدام به شیوهای متفاوت کار میکنند:
- Amazon Redshift ML از SageMaker Autopilot برای ایجاد خودکار مدلهای پیشبینی از دادههایی که شما از طریق یک دستور SQL تعیین میکنید، استفاده میکند، که در یک سطل Amazon S3 استخراج میشود. بهترین تابع پیش بینی یافت شده در خوشه Redshift ثبت شده است.
- BlazingSQL میتواند پرسوجوهای شتابدهنده GPU را روی دریاچههای داده در آمازون S3 اجرا کند، DataFrameهای حاصل را برای دستکاری دادهها به RAPIDS cuDF ارسال کند، و در نهایت یادگیری ماشینی را با RAPIDS XGBoost و cuML و یادگیری عمیق با PyTorch و TensorFlow.
- BigQuery ML بسیاری از قدرت Google Cloud Machine Learning را بدون استخراج داده از انبار داده، به انبار داده BigQuery با نحو SQL می آورد.
- IBM Db2 Warehouse شامل مجموعه وسیعی از تجزیه و تحلیل های SQL درون پایگاه داده است که شامل برخی از عملکردهای اساسی یادگیری ماشین، به علاوه پشتیبانی درون پایگاه داده برای R و Python است.
- Kinetica راه حل کامل چرخه حیات درون پایگاه داده را برای یادگیری ماشینی که توسط GPUها تسریع شده است ارائه می دهد و می تواند ویژگی ها را از داده های جریانی محاسبه کند.
- Microsoft SQL Server میتواند مدلهای یادگیری ماشین را در چندین زبان برنامهنویسی آموزش دهد و استنباط کند.
- Oracle Cloud Infrastructure می تواند میزبان منابع علم داده باشد که با انبار داده، ذخیره اشیا و توابع خود یکپارچه شده است و امکان چرخه عمر توسعه مدل کامل را فراهم می کند.
- Vertica مجموعه خوبی از الگوریتمهای یادگیری ماشین را در خود دارد و میتواند مدلهای TensorFlow و PMML را وارد کند. میتواند از مدلهای وارداتی و همچنین مدلهای خودش پیشبینی کند.
اکنون پایگاه داده دیگری وجود دارد که می تواند یادگیری ماشین را به صورت داخلی اجرا کند: دانه برف.
نمای کلی دانه های برف
Snowflake یک انبار داده سازمانی ANSI SQL کاملاً رابطهای است که از ابتدا برای ابر ساخته شده است. معماری آن محاسبات را از فضای ذخیرهسازی جدا میکند تا بتوانید بدون تأخیر یا اختلال، حتی در زمانی که درخواستها در حال اجرا هستند، به سرعت بالا و پایین کنید. شما دقیقاً در زمانی که به آن نیاز دارید عملکرد مورد نیاز خود را دریافت میکنید و فقط برای محاسبهای که استفاده میکنید هزینه میکنید.
Snowflake در حال حاضر در خدمات وب آمازون، Microsoft Azure و Google Cloud Platform اجرا می شود. اخیراً External Tables On-Premises Storage را اضافه کرده است که به کاربران Snowflake اجازه می دهد به داده های خود در سیستم های ذخیره سازی داخلی از شرکت هایی مانند Dell Technologies و Pure Storage دسترسی داشته باشند و Snowflake را فراتر از ریشه های ابری آن گسترش دهد.
Snowflake یک پایگاه داده کاملاً ستونی با اجرای برداری است که قادر به پرداختن به سختترین حجمهای کاری تحلیلی است. بهینهسازی تطبیقی Snowflake تضمین میکند که پرسوجوها بهطور خودکار بهترین عملکرد ممکن را دارند، بدون ایندکس، کلید توزیع، یا پارامترهای تنظیم برای مدیریت.
Snowflake میتواند همزمانی نامحدودی را با معماری داده مشترک چند خوشهای منحصربهفرد خود پشتیبانی کند. این به خوشههای محاسباتی متعدد اجازه میدهد تا به طور همزمان بر روی یک داده بدون کاهش عملکرد کار کنند. Snowflake حتی میتواند بهطور خودکار مقیاس شود تا نیازهای همزمانی متفاوت را با ویژگی انبار مجازی چند خوشهای خود، اضافه کردن شفاف منابع محاسباتی در دورههای اوج بار و کاهش مقیاس زمانی که بارها کاهش مییابد، انجام دهد.
نمای کلی پارک برفی
وقتی Snowflake را در سال ۲۰۱۹ بررسی کردم، اگر میخواستید بر اساس API آن برنامهنویسی کنید، باید برنامه را خارج از Snowflake اجرا کنید و از طریق درایورهای ODBC یا JDBC یا از طریق رابطهای بومی برای زبانهای برنامهنویسی متصل شوید. این موضوع با معرفی Snowpark در سال ۲۰۲۱ تغییر کرد.
Snowpark برنامه نویسی عمیقاً یکپارچه و به سبک DataFrame را در زبان هایی که توسعه دهندگان دوست دارند از آن استفاده کنند، به Snowflake می آورد، از Scala شروع می شود، سپس به جاوا و اکنون Python گسترش می یابد. Snowpark برای ساخت خطوط لوله داده پیچیده طراحی شده است و به توسعه دهندگان اجازه می دهد مستقیماً بدون جابجایی داده با Snowflake تعامل داشته باشند.
کتابخانه Snowpark یک API بصری برای پرس و جو و پردازش داده ها در خط لوله داده ارائه می دهد. با استفاده از این کتابخانه، میتوانید برنامههایی بسازید که دادهها را در Snowflake بدون انتقال دادهها به سیستمی که کد برنامه شما در آن اجرا میشود، پردازش میکنند.
Snowpark API ساختارهای زبان برنامه نویسی را برای ساخت عبارات SQL فراهم می کند. به عنوان مثال، API یک روش select
ارائه میکند که میتوانید از آن برای تعیین نام ستونها برای بازگشت استفاده کنید، به جای نوشتن 'select column_name'
بهعنوان رشته. اگرچه همچنان میتوانید از یک رشته برای تعیین دستور SQL برای اجرا استفاده کنید، اما هنگام استفاده از ساختارهای زبان اصلی ارائهشده توسط Snowpark، از ویژگیهایی مانند تکمیل کد هوشمند و بررسی نوع استفاده میکنید.
عملیات Snowpark با تنبلی روی سرور اجرا میشوند، که میزان دادههای منتقل شده بین مشتری شما و پایگاه داده Snowflake را کاهش میدهد. انتزاع اصلی در Snowpark DataFrame است که مجموعه ای از داده ها را نشان می دهد و روش هایی را برای کار بر روی آن داده ها ارائه می دهد. در کد مشتری خود، یک شی DataFrame می سازید و آن را برای بازیابی داده هایی که می خواهید استفاده کنید تنظیم می کنید.
در زمانی که شی DataFrame را می سازید، داده ها بازیابی نمی شوند. در عوض، وقتی آماده بازیابی دادهها هستید، میتوانید عملی را انجام دهید که اشیاء DataFrame را ارزیابی میکند و دستورات SQL مربوطه را برای اجرا به پایگاه داده Snowflake ارسال میکند.
نمودار بلوک پارک برفی. Snowpark قابلیت برنامه ریزی داخلی انبار داده ابری Snowflake را از SQL به Python، Java، Scala و سایر زبان های برنامه نویسی گسترش می دهد.
نمای کلی پارک برفی برای پایتون
Snowpark برای Python در پیشنمایش عمومی برای همه مشتریان Snowflake از ۱۴ ژوئن ۲۰۲۲ در دسترس است. علاوه بر Snowpark Python API و Python Scalar Defined User Functions (UDFs)، Snowpark for Python از Python UDF Batch API پشتیبانی میکند. UDF های برداری شده)، توابع جدول (UDTF)، و رویه های ذخیره شده.
این ویژگیها همراه با ادغام Anaconda به جامعه پایتون متشکل از دانشمندان داده، مهندسان داده و توسعهدهندگان انواع قراردادهای برنامهنویسی انعطافپذیر و دسترسی به بستههای منبع باز Python برای ایجاد خطوط لوله داده و یادگیری ماشینی را ارائه میدهند. گردش کار مستقیماً در Snowflake.
Snowpark برای Python شامل یک تجربه توسعه محلی است که می توانید آن را روی دستگاه خود نصب کنید، از جمله یک کانال Snowflake در مخزن Conda. میتوانید از IDEهای پایتون و ابزارهای توسعهدهنده ترجیحی خود استفاده کنید و بتوانید کد خود را با آگاهی از سازگاری آن در Snowflake آپلود کنید.
به هر حال، Snowpark برای Python منبع باز رایگان است. این تغییری نسبت به تاریخچه Snowflake در اختصاصی نگه داشتن کد آن است.
نمونه Snowpark زیر برای کد پایتون یک DataFrame ایجاد می کند که فروش کتاب را بر اساس سال جمع می کند. در زیر هود، عملیات DataFrame به طور شفاف به جستجوهای SQL تبدیل می شوند که به موتور Snowflake SQL منتقل می شوند.
from snowflake.snowpark import Session
from snowflake.snowpark.functions import col
# fetch snowflake connection information
from config import connection_parameters
# build connection to Snowflake
session = Session.builder.configs(connection_parameters).create()
# use Snowpark API to aggregate book sales by year
booksales_df = session.table("sales")
booksales_by_year_df = booksales_df.groupBy(year("sold_time_stamp")).agg([(col("qty"),"count")]).sort("count", ascending=False)
booksales_by_year_df.show()
آغاز با Snowpark Python
- نحوه ایجاد یک DataFrame که داده ها را از یک مرحله بارگیری می کند؛
- نحوه انجام مهندسی داده ها و ویژگی ها با استفاده از Snowpark DataFrame API. و
- چگونه یک مدل یادگیری ماشین آموزش دیده را به عنوان UDF در Snowflake بیاوریم تا داده های جدید را به دست آوریم.
وظیفه پیشبینی ریزش مشتری کلاسیک برای یک ارائهدهنده خدمات اینترنتی است که یک مشکل طبقهبندی دودویی ساده است. آموزش با مرحله راه اندازی محلی با استفاده از Anaconda شروع می شود. من Miniconda را برای آن نصب کردم. دانلود و نصب تمام وابستگیهای Snowpark API بیشتر از آنچه انتظار داشتم طول کشید، اما خوب کار کرد، و من از روشی که محیطهای Conda از برخورد بین کتابخانهها و نسخهها جلوگیری میکنند قدردانی میکنم.
این شروع سریع با یک فایل پارکت منفرد از دادههای خام شروع میشود و اطلاعات مربوطه را در چندین جدول Snowflake استخراج، تبدیل و بارگذاری میکند.
ما به شروع سریع «بارگیری داده با پارک برفی» نگاه می کنیم. این یک نوت بوک Python Jupyter است که روی مک بوک پرو من اجرا می شود و Snowflake را صدا می کند و از Snowpark API استفاده می کند. مرحله ۳ در ابتدا برای من مشکلاتی ایجاد کرد، زیرا از مستندات در مورد اینکه شناسه حساب خود را کجا پیدا کنم و چه مقدار از آن را باید در قسمت حساب فایل پیکربندی قرار دهم مشخص نبودم. برای مراجعات بعدی، به “Welcome To Snowflake!” برای اطلاعات حساب خود ایمیل بزنید.
در اینجا ما در حال بررسی جدول بارگیری شده از داده های تاریخی خام مشتری و شروع به تنظیم برخی تغییرات هستیم.
در اینجا ما دادههای جمعیتی را به DataFrame خود استخراج و تبدیل کردهایم و آن را بهعنوان جدول ذخیره کردهایم.
در مرحله ۱۲، فیلدها را برای جدول مکان استخراج و تبدیل می کنیم. مانند قبل، این کار با یک پرس و جوی SQL در یک DataFrame انجام می شود، که سپس به عنوان یک جدول ذخیره می شود.
در اینجا ما دادهها را از DataFrame خام به یک جدول خدمات در Snowflake استخراج و تبدیل میکنیم.
در مرحله بعد جدول نهایی Status را استخراج، تبدیل و بارگذاری می کنیم که وضعیت انقباض و دلیل خروج را نشان می دهد. سپس یک بررسی سریع عقلانی انجام میدهیم، جداول مکان و خدمات را به یک Join DataFrame میپیوندیم، سپس مجموع هزینهها را بر اساس شهر و نوع قرارداد برای Result DataFrame جمعبندی میکنیم.
در این مرحله ما به جداول جمعیتشناسی و خدمات ملحق میشویم تا نمای TRAIN_DATASET ایجاد کنیم. ما از DataFrames برای مراحل میانی استفاده می کنیم و از عبارت select
در DataFrame متصل شده برای مرتب کردن مجدد ستون ها استفاده می کنیم.
اکنون که مرحله مهندسی ETL/داده را به پایان رساندیم، میتوانیم به مرحله تجزیه و تحلیل داده/علم داده برویم.
این صفحه تحلیلی را که قرار است انجام دهیم معرفی میکند.
ما با کشیدن کتابخانه های Snowpark، Pandas، Scikit-learn، Matplotlib، datetime، NumPy، و Seaborn و همچنین خواندن پیکربندی خود شروع می کنیم. سپس جلسه پایگاه داده Snowflake خود را ایجاد می کنیم، ۱۰ هزار ردیف از نمای TRAIN_DATASET نمونه برداری می کنیم و آن را به قالب Pandas تبدیل می کنیم.
ما با استفاده از NumPy، Seaborn و Pandas به تجزیه و تحلیل داده های اکتشافی ادامه می دهیم. ما به دنبال متغیرهای غیر عددی می گردیم و آنها را به عنوان دسته بندی می کنیم.
هنگامی که متغیرهای طبقه بندی را یافتیم، سپس متغیرهای عددی را شناسایی کرده و برای مشاهده توزیع، تعدادی هیستوگرام رسم می کنیم.
هر چهار هیستوگرام.
با توجه به مجموعه ای از محدوده هایی که در صفحه قبلی دیدیم، باید متغیرها را برای استفاده در یک مدل مقیاس بندی کنیم.
داشتن همه متغیرهای عددی در محدوده ۰ تا ۱ به ساختن یک مدل کمک زیادی می کند.
سه تا از متغیرهای عددی دارای نقاط پرت هستند. بیایید آنها را رها کنیم تا مدل را کج نکنند.
اگر به اصلی بودن متغیرهای طبقه بندی نگاه کنیم، می بینیم که آنها از ۲ تا ۴ دسته متغیر هستند.
ما متغیرهای خود را انتخاب میکنیم و دادههای پانداها را در جدول Snowflake، TELCO_TRAIN_SET، مینویسیم.
در نهایت ما یک تابع تعریف شده توسط کاربر (UDF) را برای پیشبینی، با استفاده از دادههای بیشتر و مدل بهتر ایجاد و اجرا میکنیم.
اکنون ما برای استقرار یک پیش بینی تنظیم می کنیم. این بار ۴۰K مقادیر را از مجموعه داده آموزشی نمونه برداری می کنیم.
اکنون در حال راهاندازی برای برازش مدل، در راه استقرار یک پیشبین هستیم. تقسیم مجموعه داده ۸۰/۲۰ یک چیز استاندارد است.
این بار از یک طبقهبندیکننده جنگل تصادفی استفاده میکنیم و یک خط لوله Scikit-learn راهاندازی میکنیم که مهندسی دادهها و همچنین برازش را انجام میدهد.
بیایید ببینیم چگونه کار کردیم. دقت ۹۹.۳۸٪ است که ضعیف نیست، و ماتریس سردرگمی پیش بینی های نادرست نسبتا کمی را نشان می دهد. مهمترین ویژگی این است که آیا قراردادی وجود دارد و به دنبال آن مدت زمان تصدی و هزینه های ماهانه.
اکنون یک UDF برای پیشبینی ریزش و استقرار آن در انبار داده تعریف میکنیم.
مرحله ۱۸ راه دیگری را برای ثبت UDF نشان میدهد، با استفاده از session.udf.register()
به جای عبارت select
. مرحله ۱۹ روش دیگری را برای اجرای تابع پیش بینی نشان می دهد و آن را به جای عبارت DataFrame select
در یک عبارت SQL select
ترکیب می کند.
میتوانید با اجرای Machine Learning with Snowpark Python، یک شروع سریع ۳۰۰ سطحی، که دادههای اجاره Citibike را تجزیه و تحلیل میکند و یک خط لوله یادگیری ماشینی هماهنگ شده برای انجام پیشبینیهای ماهانه با استفاده از Snowflake، Snowpark Python، PyTorch و Apache Airflow ایجاد میکند. همچنین نتایج را با استفاده از Streamlit نمایش می دهد.
به طور کلی، Snowpark برای Python بسیار خوب است. در حالی که در شروع سریع به چند مورد برخورد کردم، با کمک پشتیبانی توسعهپذیری Snowflake نسبتاً سریع حل شدند.
من طیف وسیعی از کتابخانهها و چارچوبهای یادگیری ماشینی و یادگیری عمیق پایتون را که در Snowpark برای نصب پایتون موجود است، دوست دارم. من روشی را دوست دارم که کد پایتون در دستگاه محلی من اجرا میشود و میتواند انبارهای Snowflake را بهصورت پویا کنترل کند، و آنها را به میل خود افزایش و کاهش دهد تا هزینهها را کنترل کرده و زمان اجرا را تا حد معقولی کوتاه نگه دارد. من کارایی انجام بیشتر کارهای سنگین را در انبارهای Snowflake با استفاده از Snowpark دوست دارم. من دوست دارم بتوانم پیش بینی کننده ها را به عنوان UDF در Snowflake بدون متحمل شدن هزینه های استقرار نقاط پایانی پیش بینی در سرویس های ابری اصلی مستقر کنم.
در اصل، Snowpark برای Python به مهندسان داده و دانشمندان داده راه خوبی برای انجام برنامهنویسی به سبک DataFrame در برابر انبار داده سازمانی Snowflake میدهد، از جمله توانایی راهاندازی خطوط لوله یادگیری ماشینی کامل برای اجرا در یک زمانبندی مکرر.< /p>
—
هزینه: ۲ دلار به ازای هر اعتبار به اضافه ۲۳ دلار به ازای هر ترابایت ذخیرهسازی ماهانه، طرح استاندارد، فضای ذخیرهسازی پیشپرداخت. ۱ اعتبار = ۱ گره * ساعت، صورتحساب توسط دوم. برنامه های سطح بالاتر و ذخیره سازی بر اساس تقاضا گران تر هستند. هزینه های انتقال داده اضافی است و بسته به ابر و منطقه متفاوت است. هنگامی که یک انبار مجازی در حال اجرا نیست (یعنی زمانی که روی حالت خواب تنظیم شده است)، هیچ اعتبار Snowflake را مصرف نمی کند. ویژگیهای بدون سرور از منابع محاسباتی مدیریتشده توسط Snowflake استفاده میکنند و اعتبار Snowflake را هنگام استفاده مصرف میکنند.
پلتفرم: خدمات وب آمازون، Microsoft Azure، پلتفرم Google Cloud.
پست های مرتبط
بررسی: Snowflake Aces یادگیری ماشین پایتون
بررسی: Snowflake Aces یادگیری ماشین پایتون
بررسی: Snowflake Aces یادگیری ماشین پایتون