Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Snowpark for Python を効率的に使いこなすスタートライン(UDF)
Search
Toru Hiyama
September 19, 2024
Technology
120
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
420
SPCSでエンドツーエンドな深層学習に挑戦してみた
toru_data
1
190
Streamlit Meetup Workshop:Streamlitのコントリビューションに挑戦してみよう
toru_data
0
140
Other Decks in Technology
See All in Technology
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
730
攻撃 3 時間 vs 復旧 10 時間。アクセスキー流出の非対称性を体感するために CTF を作った話
kazzpapa3
1
130
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
1
110
新卒エンジニア、 介護士になる
ryu1013
1
660
Lint の層を組み直した話
bengo4com
1
280
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
0
190
ALBのLCU予約とトラフィックの波によるプロダクト理解 / Understanding ALB LCU and Traffic Spikes
mito201
1
120
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
190
今から始めるAWS環境の暗号移行 - ポスト量子時代に備える
sato4mi
0
150
キヨさん、67歳。AIコーディングエージェントに挑む
happysamurai294
0
140
eBPF 簡介 2026 版
shunghsiyu
0
120
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
480
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
New Earth Scene 8
popppiees
4
2.7k
Exploring anti-patterns in Rails
aemeredith
4
550
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
550
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
650
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Test your architecture with Archunit
thirion
2
2.5k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
810
Building an army of robots
kneath
307
47k
How STYLIGHT went responsive
nonsquared
100
6.3k
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に関するアップデートも続々とリリースされてきているので、今後のアップデートも要チェックです! ★ ご興味ある方は、ぜひのちほどのフリートークの場などでお声がけください!