Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Snowpark for Python を効率的に使いこなすスタートライン(UDF)
Search
Toru Hiyama
September 19, 2024
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Snowpark for Python を効率的に使いこなすスタートライン(UDF)
Toru Hiyama
September 19, 2024
More Decks by Toru Hiyama
See All by Toru Hiyama
Snowflake ✕ LangChain でできること
toru_data
0
400
SPCSでエンドツーエンドな深層学習に挑戦してみた
toru_data
1
180
Streamlit Meetup Workshop:Streamlitのコントリビューションに挑戦してみよう
toru_data
0
140
Other Decks in Technology
See All in Technology
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
0
110
会計事務所と顧問先の契約関係をOIDC・OAuthで表現する
terara
0
340
GopherCon @シアトル に行ってきました
logica0419
0
270
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
170
Digitization部 紹介資料
sansan33
PRO
2
7.7k
コミュニティから始まった農業IoTとの7年間 ——人との関わりが教えてくれたこと
peacemaker07
0
110
フィジカルAIの知識ゼロの僕でも AIを使えばここまでできた
tatsuya1970
0
180
:syncing_time:
sksat
2
760
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
dbt と Snowflake と tag
kevinrobot34
1
250
巨大気象データと戦う ― サロゲートモデル学習を高速化する圧縮技術
gpuunite_official
0
280
AI駆動開発はどこまで来たのか? ファインディの最新実態調査で読み解く現在地 Devin Con Tokyo
akiratom
1
1.1k
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
480
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
250
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
How to build a perfect <img>
jonoalderson
1
5.9k
We Have a Design System, Now What?
morganepeng
55
8.3k
Thoughts on Productivity
jonyablonski
76
5.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
560
Transcript
【オフライン限定】Snowflakeの小技LT〜ChatGPTも知らない?秘密のテクニック教えて!〜 Snowpark for Pythonを効率的に使いこなすスタートライン 2023年5月18日(木) 株式会社NTTデータ Snowflakeビジネス推進室 檜山 徹
© 2023 NTT DATA Corporation 2 2 自己紹介 Snowpark for
Pythonって何? そもそもUDFって?どうやって使うの? UDFの効率的な使い方1(Vectorized UDF) UDFの効率的な使い方2(CacheTools)
© 2023 NTT DATA Corporation 3 Snowpark for Pythonって何? ➢
Snowpark for Python は、主に以下の3つの機能で構成されます。 • 本日は、主に「UDF」にスポットを当ててみます。 UDFはとっつきづらい所はありますが、非常に便利なツールです。
© 2023 NTT DATA Corporation 4 そもそもUDFって?どうやって使うの? ➢ UDF(User Defined
Function)とは、POWやSQRT、HASHなどのシステム定義関数と同じように使用できる 関数を自作できる機能です。 • 各入力行を複数のノードで並列処理するため、効率的に計算できます。 [Python: UDF定義] @udf(name=multiply) def multiply( a:float, b:float ): return a*b 1 2 3 a b a b a*b ノード1:1×2 ノード2:2×3 ノード3:3×4 2 3 4 2 6 12 4 5 ノード4:4×5 ノード5:5×6 5 6 20 30 [SQL: UDF呼び出し] select a, b, multiply(a,b) from table; UDFの処理イメージ インプットデータ アウトプットデータ UDFの定義・呼び出しイメージ
© 2023 NTT DATA Corporation 5 そもそもUDFって?どうやって使うの? ➢ UDF(User Defined
Function)とは、POWやSQRT、HASHなどのシステム定義関数と同じように使用できる 関数を自作できる機能です。 • 各入力行を複数のノードで並列処理するため、効率的に計算できます。 [Python: UDF定義] @udf(name=multiply) def multiply( a:float, b:float ): return a*b 1 2 3 a b a b a*b ノード1:1×2 ノード2:2×3 ノード3:3×4 2 3 4 2 6 12 4 5 ノード4:4×5 ノード5:5×6 5 6 20 30 [SQL: UDF呼び出し] select a, b, multiply(a,b) from table; UDFの処理イメージ インプットデータ アウトプットデータ UDFの定義・呼び出しイメージ つまり、「各行に対する処理」が独立している場合、(=スカラー) UDFを使用することで効率的な処理が可能! 機械学習の推論ユースケースにも非常に適している。 例:画像認識、音声・言語処理、などなど・・・
© 2023 NTT DATA Corporation 6 UDFの効率的な使い方1(Vectorized UDF) ➢ 処理したいデータは、数億レコード以上にのぼります。このとき、UDFをレコード
一行ずつに対して呼び出していたのでは、オーバーヘッドが大きくなってしまいます。 • そこで役立つのが、この「Vectorized UDF」です! • これにより、バッチでデータを入力・処理でき、呼び出し回数を大きく削減できます。 • 使い方は、Pandas Dataframeを処理する関数を定義するだけ、です。 • 呼び出しも通常のUDFと全く同じ・・・! @udf(name=“infer_model”) def vectorized_infer_model( df: pd.DataFrame ) -> pd.Series: model_name = 'model.sav' model = load(import_dir+model_name) scored_data = pd.Series(model.predict(df)) return scored_data ※上記コードは簡略化のため一部省略しています。 通常のUDFの結果 Vectorized UDFの結果 > 7倍高速! (42.9s -> 5.87s)
© 2023 NTT DATA Corporation 7 UDFの効率的な使い方2(CacheTools) ➢ 機械学習モデルはしばしば大容量になります。そのため、UDFのノード起動のたびにモデルを読み込むと、それだ けでも結構な時間になってしまいます。
• そこで役立つのが、この「キャッシュ」です! • 使い方は、モデル読み込み関数を定義し、キャッシュデコレータを付与することで、モデルの読み込みをキャッ シュできます。 @cachetools.cached(cache={}) def load_model(model_path): return load(model_path) @udf(name=“infer_model”) def vectorized_infer_model( df: pd.DataFrame ) -> pd.Series: model_name = 'model.sav' model = load_model(import_dir+model_name) scored_data = pd.Series(model.predict(df)) return scored_data Vectorized UDF(キャッシュ)の結果 通常のUDFの結果 > 12倍高速! (42.9s -> 3.54s) ※上記コードは簡略化のため一部省略しています。
© 2023 NTT DATA Corporation 8 おわりに ➢ このようにSnowpark for
PythonにおけるUDFは、機械学習の推論などの処理と、非常に相性のよいツールとなっています。 • 今回は機械学習タスクにフォーカスして紹介しましたが、その他のデータ処理においても効果的にはたらく機能です。 • ぜひUDFとストアドプロシージャの違いを知っていただいて、今後の開発に役立てていただければと思います! • 今回は紹介できていませんが、UDTFというグループに対する集計(Window関数)用のUDFも用意されています。ぜ ひそちらもチェックしてみてください。 ➢ SnowparkやPythonに関するアップデートも続々とリリースされてきているので、今後のアップデートも要チェックです! ★ ご興味ある方は、ぜひのちほどのフリートークの場などでお声がけください!