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
Android skills に学ぶ
kokiko
0
180
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
0
160
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
280
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
160
500名弱規模の組織のPythonプロジェクト(dbt) をどう管理するか?
hiracky16
0
130
internal/testlog で遊ぼう
rokuosan
0
230
作って理解するCoding Agent 〜フレームワークに頼らないピュア Python での実装〜
takapy
4
1.3k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
三人寄ればチューリング完全
puhitaku
6
3.2k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
コミュニティから始まった農業IoTとの7年間 ——人との関わりが教えてくれたこと
peacemaker07
0
110
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
We Have a Design System, Now What?
morganepeng
55
8.3k
How GitHub (no longer) Works
holman
316
150k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
560
Site-Speed That Sticks
csswizardry
13
1.5k
Faster Mobile Websites
deanohume
310
32k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
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に関するアップデートも続々とリリースされてきているので、今後のアップデートも要チェックです! ★ ご興味ある方は、ぜひのちほどのフリートークの場などでお声がけください!