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
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
Search
GOTOH Shunsuke
December 10, 2023
Technology
710
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Julia本を書いたら技術顧問になった話 for JuliaTokai #17
JuliaTokai #17 LT資料
GOTOH Shunsuke
December 10, 2023
More Decks by GOTOH Shunsuke
See All by GOTOH Shunsuke
JuliaTokaiとしてはこれが最後かもしれない(仮) for NGK2026S
antimon2
0
310
JuliaでApp(仮) for JuliaTokai #23
antimon2
0
190
関数型まつりレポート for JuliaTokai #22
antimon2
0
310
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
1.6k
FP in Julia « SIDE: J » for JuliaTokai #21
antimon2
1
270
JuliaTokaiとJuliaLangJaの紹介 for NGK2025S
antimon2
1
410
あなたの知らない(概ね知らなくても良い)Juliaの世界 for JuliaLangJa 年末 LT 大会 2024
antimon2
0
230
Julia 新 LTS v1.10 解説 for JuliaTokai #20
antimon2
1
480
夏休みの(最後の)宿題 for JuliaTokyo #12
antimon2
1
330
Other Decks in Technology
See All in Technology
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
0
870
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
190
特殊変数大全
dak2
0
150
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
7
790
全社共通データ基盤をつくる。ソニーのDatabricks活用とデータガバナンス設計の裏側
sony
0
120
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
220
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
130
AIは推し活である。
kurazuuuuuu
2
990
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
1
530
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
580
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
330
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
140
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
4
520
Git: the NoSQL Database
bkeepers
PRO
432
67k
My Coaching Mixtape
mlcsv
0
330
Un-Boring Meetings
codingconduct
0
430
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Typedesign – Prime Four
hannesfritz
42
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Transcript
Julia本を書いたら 技術顧問になった話 2023/12/10 JuliaTokai #17 antimon2(後藤 俊介)
お品書き • お前誰よ? • 簡単な Julia の紹介 • Julia本 発刊から約9ヶ月
• Juliaでお仕事!
お前誰よ?
自己紹介 • 名前:後藤 俊介 • 所属:有限会社 来栖川電算 • コミュニティ:🌟JuliaTokai, 🌟機械学習名古屋,
⭐Ruby東海, ⭐Python東海, ⭐jl.dev, … • 言語:Julia, Python, Ruby, … • SNS等: (@antimon2) • SNS等(2): (@antimon2.jl) • 著書:実践Julia入門
https://www.kurusugawa.jp
https://twitter.com/antimon2/status/1635765451220459520
簡単な Juliaの紹介
None
Julia とは?(1) • The Julia Language • 最新 v1.9.4(2023/11/14) ◦
LTS:v1.6.7(2022/07/19) ◦ 次期:v1.10.0-RC2(2023/12/03) • 科学技術計算に強い! • 動作が速い!(LLVM JIT コンパイル)
Julia とは?(2) • Rのように中身がぐちゃぐちゃでなく、 • Rubyのように遅くなく、 • Lispのように原始的またはエレファントでなく、 • Prologのように変態的なところはなく、
• Javaのように硬すぎることはなく、 • Haskellのように抽象的すぎない ほどよい言語である 引用元:http://www.slideshare.net/Nikoriks/julia-28059489/8
Julia とは?(3) • C のように高速だけど、 Ruby のようなダイナミズムを併せ持っている • Lisp のような真のマクロを持ちながら、
MATLAB のような直感的な数式表現もできる • Python のように総合的なプログラミングができて、 R のように統計処理も得意で、 Perl のように文字列処理もできて、 MATLAB のように線形代数もできて、 shell のように複数のプログラムを組み合わせることもできる • 超初心者にも習得は容易でありながら、 ハッカーの満足にも応えられる • インタラクティブな動作環境もあって、コンパイルもできる (Why We Created Julia から抜粋・私訳)
要するに • 動的言語なのに速い! • 文法も覚えやすい! • 数値計算に強い!
Julia の主な特徴 • 多重ディスパッチ • 動的型システム • 並行・並列処理、コルーチン • 組込パッケージマネージャ
Julia本 発刊から約9ヶ月
https://www.amazon.co.jp/o/ASIN/4297133504
https://www.amazon.co.jp/product-reviews/4297133504/ref=c m_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews
¾年で変わったこと、イベント
研究集会に呼ばれた • 2023/07/10-12 • Juliaチュートリアル講演 2コマ担当 • アーカイブ(動画): ◦ 型と多重ディスパッチ
◦ スレッド並列の基礎 https://joint.imi.kyushu-u.ac.jp/post-9030/
印税 • 2023/06 最初の振込 ◦ 最低保証部数分 ◦ +電子版の売上分 • 2023/12
2回目の振込(まだ) ◦ 電子版の売上分 • ※詳細割愛
Juliaの仕事(10月~) • 会社に案件打診 • 10月から開始 • この後詳しく…
Juliaでお仕事!
Julia の (もしくは一般的なプログラミングの) お仕事 • 受託開発 ◦ 特定の環境で動くシステムのプログラミング、など • 研究開発
◦ 最新技術等を用いて課題を解決する業務、など • (サイエンス) エンジニアリング ◦ 数値計算や各種データ分析手法を用いた分析・提案など • etc… 今回は…
技術顧問
経緯 (0) お客さま側の経緯 (before first contact)… • ある大規模データを扱うプロダクトを Julia で開発中
• 共同開発者 もしくは 技術顧問 的な人員を探していた • 拙著 『実践Julia入門』 を参考書の1つとして読んでいただ いていた • 奥付の著者(私)の所属会社名を ググってコンタクト
経緯 (1) こちら側の経緯 (after first contact)… • 所属会社のお問い合わせフォームにてコンタクトあり • 概要を聞いて
「ぜひ協力したい!」 と返答 : (メール および オンラインミーティングでのやり取り) • 正式に契約!
契約内容 • コンサル(技術顧問) っぽい 契約 ◦ 共同開発という形ではない ◦ 作業内容としては技術面 (およびJulia言語的側面)
でのレビュー およびアドバイス (コンサルティング) • 契約形態としては 請負契約 ◦ (お客さま側の) 都合により コンサル契約(準委任契約) できず ◦ 成果物として指摘内容等をまとめたものを納品すればOK • 期間 ◦ 2023/10~12
レビュー (アドバイス) 基準 的なもの • 見る点 ◦ Julia における 効率の良いコード・悪いコード
◦ 特に マルチスレッド 関連 (あまり経験がない) ◦ その他、一般的なコーディング技術面 (下記を除く) • 見ない点 ◦ コードフォーマット (お客さま独自規約のためスルー) ◦ 命名規則 (お客さま独自規約のためスルー)
指摘・提案例 (1) スレッドの競合 • マルチスレッドで期待 通りに動作しない箇 所の発見 • ⇒「ロック機構 (排他
制御) 使いましょう」 という指摘・修正提案 例→ q = Vector{DataFrame}() count = 0 some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) push!(q, t1, t2, t3) count += 1 end q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end
指摘・提案例 (2) スレッドによる非同期動作 • マルチスレッドで非同 期で動作するために テストがこける • ⇒無理矢理にでも同 期を取って順序を保
つテクの提案 例→ q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end q = Vector{DataFrame}() count = 0 spinlock = Threads.SpinLock() some_proc(args...) do ts1, t2, t3 wait_by_read_air(ts1) # ここで同期を取る t1 = read_table(ts1) @lock spinlock begin push!(q, t1, t2, t3) count += 1 end end
指摘・提案例 (3) ユーザ定義型の等価性 • パフォーマンス面でよ ろしくないコード • ⇒生成関数 を利用し て半自動化かつパ
フォーマンスの良い コードの提案 例→ @generated function _equals(a::T, b::T) where T _cmp(name) = :(getfield(a, $(QuoteNode(name))) == getfield(b, $(QuoteNode(name)))) mapfoldr(_cmp, (x,y) -> :($x && $y), fieldnames(T), init=true) end # 無駄なアロケーション発生しない速い Base.:(==)(a::Hoge, b::Hoge) = _equals(a, b) getfields(obj) = [getfield(obj, name) for name in fieldnames(typeof(obj))] _equals(a,b) = getfields(a) == getfields(b) # ←↑無駄なアロケーション発生するし遅い Base.:(==)(a::Hoge, b::Hoge) = _equals(a, b)
指摘・提案例 (4) マルチスレッド時のメモリ消費問題 • 「スレッド数は増やしたいけれど、闇雲に増やすとその分比 例してメモリ消費するんですよね…」 ◦ ⇒Base.Semaphore() というのがあります! ◦
FoldsThreads.jl の TaskPoolEx を利用すれば、件 数/スレッド (basesize) と スレッド数/処理 (=セマ フォ、ntasks) 両方指定できます • ※コード例なし(提案を受け先方で検討中)
指摘・提案例 (5) その他… • パイプライン演算子(|>)や @chain による「全て計算してから次の計 算に渡す」ような実装になってしまっている箇所の発見・指摘 ◦ ⇒遅延リスト(ジェネレータ)
や any() 関数の適切な使用による パフォーマンス向上案を提案 • ifelse() 関数の問題点の指摘 (第2・第3引数がともに評価(≒実 行)されてしまう) ◦ ⇒普通に 三項演算子 (~ ? ~ : ~) 使いましょう • プロファイリング や @code_warntype とか見た方が良いかも? ◦ 残りの契約時間で可能な限り実施
お客さまの反応 • 上々! ◦ ※詳細割愛
個人の感想 • 超楽しい!! ◦ こういう仕事がしたかった♪
言いたかったこと… • 仕事の形には色々ある。 • 自分の強み・知識が活かせてお客さまにも 喜んでもらえる、そんな仕事ができている 幸せ♪
結論
結論 • 書籍の執筆 ⇒ 夢が一つ叶った♪ • Julia でお仕事 ⇒ もう一つ夢が叶った♪
• Julia 楽しいよ! • Julia でやるお仕事楽しいよ!
参考
参考文献・リンク等 • 実践Julia入門(拙著) • julialang.org(Julia 本家サイト)
ご清聴ありがとうございます。