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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
380
SPCSでエンドツーエンドな深層学習に挑戦してみた
toru_data
1
170
Streamlit Meetup Workshop:Streamlitのコントリビューションに挑戦してみよう
toru_data
0
130
Other Decks in Technology
See All in Technology
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.1k
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.6k
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
4
2.6k
プロンプト_きのこカンファレンス2026_LT
yurufuwahealer
0
150
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
4.9k
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
610
ゼロをイチにする仕事が終わったあと
smasato
0
330
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6k
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.1k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
430
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
270
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
170
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
How to Ace a Technical Interview
jacobian
281
24k
Between Models and Reality
mayunak
4
370
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
490
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
800
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
280
Site-Speed That Sticks
csswizardry
13
1.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に関するアップデートも続々とリリースされてきているので、今後のアップデートも要チェックです! ★ ご興味ある方は、ぜひのちほどのフリートークの場などでお声がけください!