PyCon US 2024レポートの3回目は、カンファレンス3日目とスプリントの様子をお伝えします。カンファレンス3日目はCPythonのコア実装についてのトークを中心に聴きました。またクロージングでは驚きの表彰がありました。スプリントでは1日開発を行って、筆者のPyCon USが終了しました。
カンファレンス3日目
Day 3ライトニングトーク
カンファレンス3日目のライトニングトークは朝にのみ行われます。ここで、毎年恒例のPyCon、Pythonイベント紹介のライトニングトークがあります。これは世界各国のPyConやPython関連イベントを、1イベント1枚のスライドで、リレー形式で紹介をするというものです。PyCon JP 2024の紹介は共同座長である吉田さんが行いました。写真を見ると吉田さんの右の方に、各イベントの主催者が列になって順番に並んでいるのがわかります。
スライドだけ用意して主催者が来ていないイベントもあります。その場合は司会のCheukさん
ポスターセッションとジョブフェア
PyCon USのカンファレンス3日目は、10時から13時までの3時間はポスターセッションとジョブフェアのみとなります。
ポスターセッションはA0などの大きいサイズのポスターを掲示し、その内容について発表者と参加者がディスカッションをするといったイベントです。今年は30件弱のポスター発表があったようです。写真はfunix.
ジョブフェアは求職のためのイベントです。いくつかの企業がブースを出しており、就職を希望している人が企業の担当者と直接話をするというものです。以下の写真ではSentryとPlotly Technologies Incが企業ブースを出しており、たくさんの人が話を聞いていました。
アメリカで仕事を探している人は、ジョブフェアに来ると企業の担当者と直接話ができるのでおすすめです。
Building a JIT compiler for CPython
- Building a JIT compiler for CPython
- スピーカー:Brandt Bucher
- スライド:building_
a_jit_ compiler_ for_ cpython. pdf -GitHub - 動画:Talks - Brandt Bucher: Building a JIT compiler for CPython
スピーカーのBrandt Bucher氏は2021年からMicrosoftのFaster CPythonチーム
まずJIT導入の背景として以下が述べられました
- CPython 3.
11:適応型インタープリターがプログラムを分析し最適化する - CPython 3.
12:インタープリターの生成機能はDSLの仕様から解析と変更が可能になる - CPython 3.
13:micro-opインタープリターが 「ホット」 なコードを検出して最適化して実行する
以下のようなフィボナッチ関数のコードを例に、バイトコードとスタックの状態を使って説明が進められました。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
for
文の箇所は通常は FOR_
というバイトコードになりますが、この場合は特殊なバイトコードの FOR_
に置き換えられるそうです。同様に a + b
の箇所は BINARY_
が BINARY_
となるそうです。そしてバイトコードから生成された "micro-op" を最適化するという動作をするそうです。しかし、この機能をONにするとオーバーヘッドが増加するため、20%遅くなるそうです。
そこで、JIT
- Copy-and-patch compilation: a fast compilation algorithm for high-level languages and bytecode
- Building a baseline JIT for Lua automatically
コピー&パッチの手法ではWebAssemblyのLiftoffコンパイラより、5倍速くコードを生成し、50%コードが速いそうです。また、LLVMと比較すると100倍コード生成が速く、15%コードが速いそうです。
そしてCPython版のコピー&パッチの実装を進めており、現在はビルド時には1000行の複雑なPythonコード、100行の複雑なCのコードとLLVMを使用しています。また、実行時には400行のシンプルなCのコードと、生成されたシンプルな9000行のCのコードのみで、システム依存はないとのことです。そして、X86、X86-64とARM64のWindows、macOS、Linuxをサポートしています。
パフォーマンスとしては冒頭に述べたmicro-opインタープリターでは20%遅かったのですが、JITでは現状はCPythonと同じパフォーマンスで、10%ほどメモリが余分に必要となるそうです。
詳細については以下のPEP
試してみたい方は、CPython 3.
> Pbuild/build.bat --experimental-jit $ ./configure --enable-experimental-jit
めちゃめちゃ難しい内容のトークでした。CPythonの高速化としてJITがどうなっていくのか、今後に注目していきたいと思います。
How two undergrads from the other side of the planet are speeding up your future code
- How two undergrads from the other side of the planet are speeding up your future code
- スピーカー:Ken Jin、Jules Poon
- 動画:Talks - Ken Jin, Jules Poon: How two undergrads from the other side of the planet are speeding up your future code
スピーカーのKen Jin氏とJules Poon氏はタイトルにもあるとおり大学の学部生です。シンガポールの大学の中でCPythonのバイトコードの最適化にチャレンジしているという内容です。また、Ken Jin氏は2021年からCPythonのコアデベロッパーでもあるそうです。世界にはすごい人がいるなと感じました。
まずは過去の経緯から説明がありました。2022年以前からKen氏はFaster CPythonチーム
背景としてCPythonはPythonをC言語で実装したものです。そしてCPythonはバイトコードのスタックマシーンであり、Python言語をコンパイラでバイトコードに変換し、そのバイトコードをスタックに積んで処理しているというものです。例として (a + b) * c
というコードではどのようにバイトコードが生成され、スタックでどのように処理が行われるかの説明がありました。
2 LOAD_GLOBAL 0 (a)
14 LOAD_GLOBAL 2 (b)
26 BINARY_OP 0 (+)
30 LOAD_GLOBAL 4 (c)
42 BINARY_OP 5 (*)
上記のバイトコードではa
、b
、c
の変数の型がわからず、BINARY_
は動的に型を調査するため、処理が遅くなります。そこでCPython 3.LOAD_
や BINARY_
などの特殊なバイトコードによって処理を高速化しています。
CPython 3.
CPython 3.
- Guard Elimination (3.
13で一部実装済み) - True Function Inlining (作業中)
- Deferred Object Creation (作業中)
- Register allocation/
top of stack caching (作業中)
Guard Eliminationは、a += b + b + b
というコードを実行するときに、b
がintである場合に(b + b) + b
を実行する前に両方の値がintかをチェックするGuardを削除するというものです。
True Function Inliningは、関数呼び出しにオーバーヘッドがあるのでインライン化して1つの大きい関数にするというものです。
Deferred Object Creationは、[0, 1, 2, 3][3]
がリストを生成せずに3
を返すというものです。他にも filter(lambda x: x%2, [1, 2, 3, 4, 5])
で中間のリストを生成せずにフィルターを返すというアイデアもあるそうです。
Register allocation/
最後に、なぜ2人がこの活動をしているかについての話がありました。Ken氏は大学に入る前からCPythonでの活動を開始していたそうです。大学の1学期で2人はMark Henz氏のもとでプログラミング言語実装を受講し、最初の実験的なPyLBBV実装をしました。
この開発を夏も続け、次の年にはManuel Rigger氏が2人のアドバイザーとなったそうです。このように大学が提供している学生のメンターシップを最大限に利用しましょうと語っていました。また、自分が必要とするクラスを取りましょうとも語っていました。
JITに続きめちゃくちゃ内容が難しいトークでした。こんなすごいCPythonの実装を、シンガポールの大学生が行っているということに、非常に驚きました。また、CPythonが地道に高速化するためにいろいろなことを行っていることを知りました。
トークが終わった後に2人にあいさつさせてもらい、
Unlocking the Parallel Universe: Subinterpreters and Free-Threading in Python 3.13
- Unlocking the Parallel Universe: Subinterpreters and Free-Threading in Python 3.
13 - スピーカー:Anthony Shaw
- 動画:Talks - Anthony Shaw: Unlocking the Parallel Universe: Subinterpreters and Free-Threading in Python 3.
13
スピーカーのAnthony Shaw氏はCPythonをはじめさまざまなOSSの開発者であり、CPython Internalsの著者でもあります。日本のPyConにも参加したことがあり、PyCon APAC 2023ではPython 3.
最初にこのトークの前提条件として、いくつかのトークやドキュメントが提示されました。JITのトークについてはこの記事で紹介したものです。
- PyCon US 2023 - Eric Snow talk on sub interpreters
- EuroPython 2022 - Sam Gross talk on free-threading
- PyCon US 2024 - "Sync vs Async in Python" happening right now
- PyCon US 2024 - Building a JIT compiler for CCython
- PyCon US 2024 - Overcoming GIL with sub interpreters and immutability
- "Parallelism and Concurrency" chapter from Python Internals
- My Masters Thesis doi.
org/ 10. 25949/ 23974764. v1
最初に丸めた紙をPickleされたデータに見立てて、それを会場に投げて処理してもらって並列でタスクを実行する例について説明していました。なかなか面白いアプローチです。
Pythonでの並列実行についてスレッド、コルーチン、マルチプロセッシング、サブインタープリターの4つを提示し、それぞれの特徴メリットデメリットについて紹介しました。複数のCPUコアを使用する場合はマルチプロセッシングかサブインタープリターが適しています。
CPython 3.
ここからフリースレッドの話になりますが、Python 3.
- GILを削除する
- メモリ確保とガベージコレクターを変更する
- GILが存在するすべてのCのコードを修正する
Python 3.
まとめとして、マルチプロセッシングに対してサブインタープリターはよりよい解決策となるということ、フリースレッディングはデータ交換のためのスレッドプールより良い解決策となるということが語られました。ただし、Pythonはスレッドを安全に使うためにGILに依存してました。そのため、GILを削除すると予測しない方法で壊れてしまう可能性があるとのことです。
GILの削除はすぐにはデフォルトにならないと思いますが、CPythonのコアが徐々に変わっていっているということが理解できました。
Steering Council Panel
- 動画: Python Steering Council Panel - YouTube
- スピーカー:Barry Warsaw、Emily Morehouse、Pablo Galindo Salgado、Thomas Wouters、Gregory P. Smith
Python Steering Councilは投票によって選ばれた5名による委員会で、Python言語とCPythonインタープリターの品質と安定性の維持や、PEP
Steering Councilは毎年投票によって選出されます。Guido氏がBDFLを退任したときに、コア開発者が集まって議論しガバナンスモデルを提案しました。そして結果として現在のSteering Councilモデルとなりました。ガバナンスモデルについては以下のPEPに書いてあります。
現在のCouncilメンバーは以下のように所属もバラバラです。同じ会社のメンバーは2名までという制限があるそうです。
- Thomas Wouters - Google
- Pablo Galindo Salgado - Bloomberg
- Gregory P Smith - Employer TBD
- Emily Morehouse - Cuttlesoft
- Barry Warsaw - NVIDIA
PSFの資金を使用してCPythonの開発のためにさまざまな活動を行っています。Developers in ResidenceとSecurity Developer in Residenceは、PSFがフルタイムで雇用する技術者で、現在5名います。新たにSteering Councilの秘書を雇ったそうです。たしかにいろいろな作業がありそうなので、秘書がいると助かりそうです。また、年次のコアデベロッパースプリントを開催しているそうです。年に1回、世界中のコアデベロッパーが集まり、一週間CPythonの開発を行います。
Steering Councilと連携してさまざまなワーキンググループが活動しているそうです。Ptyhonドキュメントの編集委員会、C APIのワーキンググループ、型ヒントのガバナンスが紹介されました。詳細は以下のPEPを参照してください。
- PEP 732 – The Python Documentation Editorial Board
- PEP 731 – C API Working Group Charter
- PEP 729 – Typing governance process
次に2024年10月にリリース予定のPython 3.
型ヒントでの変更は以下です。
- PEP 696 – Type Defaults for Type Parameters
- PEP 702 – Marking deprecations using the type system
- PEP 705 – TypedDict: Read-only items
- PEP 742 – Narrowing types with TypeIs
またPython 3.
最後にCPythonでGILをオプションにする件について説明がありました。
長いゴールとしては、フリースレッドのビルドのみとなるのは5年以上先とのことです。後方互換性の維持をすること、またサードパーティのコードをGILがないビルドに対応させる必要があることが語られました。
フリースレッド機能は3つのフェーズに分けて進めるとのことです。フェーズ1ではビルドオプションで可能になり、デフォルトではインストールされません。フェーズ2はAPIとABIが安定した時点からとなり、コミュニティでのテストなどのサポートが必要です。フェーズ3ではフリースレッドでのビルドがデフォルトとなりますが、当初は無効化も可能にします。将来的にはGILありのビルドの削除についても議論するとのことです。
かなり丁寧にフリースレッドについて進めるということが認識できました。また、Python 4の予定がないことを強調して伝えていたことが印象的でした。
Python Software Foundation Update
- 動画:Python Software Foundation Update - YouTube
- スピーカー:Deb Nicolson、Lynn Root
クロージングの前にPSF UpdateとしてPSFの活動の話がありますが、最初に
12月に開催されたPyLadiesConのあとにCheuk Ting Ho氏が
1人目のAbigail Dogbe氏は2017年にPyLadies Ghanaを立ち上げ、彼女とそのコミュニティはリベリア、エチオピア、ザンビアなど8つのPyLadies支部に影響を与えたそうです。他にもDjangoCon USでの基調講演なども行っているそうです。2人目のJessica Greene氏はベルリンのPyLadies支部を6年以上運営し、インドのデリーなど他の支部にも影響を与えたそうです。他にもPython Pizza Hamburgの運営もしているそうです。
最後に3人目のMaaya Ishida氏はPyLadiesの東京支部に10年以上係わっており、日本全国のPyLadiesとつながることを目的としたPyLadies Caravanも主催しています。またPyCon Hong Kongで基調講演を行っており、PyCon JP Associationの理事でもあります。
PyCon JPやPython界隈で筆者も一緒に活動しており友人でもあるMaayaさんが、初めてのPyLady Awardを受賞する1人となりました。ものすごくびっくりしましたし、いままでの継続的な活動が認められたんだと思う、とても喜ばしいことだと感じました。
最後にスポンサーと、今年のPyCon USのChairであるMariatta氏へ感謝を述べて、次のChairであるElaine氏を紹介しました。そしてPSFのスタッフが壇上に揃い、参加者から拍手が送られました。ちなみに、左から3人目の青いシャツの人が、私に
Closing
クロージングではChairのMariatta氏から、予算、トーク数、登録者数などを2023年と比較して報告が行われました。登録者数は2736名、実際に参加した数は2551名、初参加は1752名だそうです。65%が初参加とのことで、初参加の比率が高いなと感じました。Travel Grant
そしてPyCon US 2025と2026のChairであるElaine Wong氏にバトンタッチされ、今後のPyCon USについての紹介が行われました。PyCon US 2025はピッツバーグで5月中旬のほぼ同じ時期に開催されます。
そしてPyCon US 2026はカリフォルニア州のロングビーチで開催されることが発表されました。ロサンゼルスからアクセスしやすいので、これはディズニーランド
こうして、PyCon US 2024の3日間のカンファレンスは無事に終了しました。
アジアメンバーでビールパーティー
この日は韓国のSeongsoo Cho氏から
このお店は結構広く、別のテーブルにはラテン系のPyCon US参加者のテーブルができていました。ヨーロッパからの参加者もいるため、寺田さんがEuroPythonにも参加する青野高大さんを紹介していました。青野さんはそのままそっちのテーブルに居座って、こちらのテーブルには戻ってきませんでした。ラテンのノリと性格が合うのかも知れません。
スプリント
カンファレンスのあとは開発スプリントです。これはCPythonを含むPython関連のオープンソースのプロジェクトに参加し、一緒に開発をするというイベントです。PyCon US 2024のスプリントは5月20日
プロジェクトの一覧はこれが全てではないですが、以下のページで確認できます。
会場に行くと、各部屋のプロジェクト名が書いてあるので、これを見て参加したいプロジェクトの部屋に行きます。たとえばPython CoreはRoom 320であることがわかります。
PyScriptスプリント
筆者は昨年に引き続きPyScriptスプリントに参加しました。リーダーも昨年と同じFabio Pliger氏でした。あいさつをして、GitHub Issuesの中から
そして簡単なドキュメントのリンク切れを修正するPull Requestを作成し、無事にMergeされました。ちょっとでも貢献できてよかった。
スプリントの様子
会場を歩いていると、廊下にあるテーブルにみんながステッカーを広げていました。さながらステッカー交換所のようです。参加者が連れている小さいお子さんが、喜んでステッカーを集めていました。こういうのは万国共通なんですね。
また横を見ると、日本から参加した青野さん
Memrayの部屋をのぞいてみると、寺田さんがIssueと格闘していました。あとで話を聞いてみると、時間切れで途中までしかできなかったが、他の人が引き継いでくれて解決したそうです。
さまざまな人との出会い、再会
ランチはランチボックスが提供されました。ランチが提供されるだけありがたいです。メインはチキンサラダで、ポテチとリンゴがまるごと1つ付いてくるのがアメリカっぽいなと思います。ランチを食べていると隣の人から
スプリントでは久しぶりの人との再会もできました。Eric Matthes氏は筆者が翻訳をした書籍の原著者です。
最後のパーティー
今日のスプリントで最後までいるアジアメンバーで飲みに行こう!
日本、韓国、台湾、インドのコミュニティメンバーと楽しい会話をしながら、筆者の充実したPyCon US 2024が終了しました。このお店は気に入ったので、また来年も来よう!
おわりに
PyCon US 2024のレポートは以上です。今年もまた非常に充実したイベントでした。アジアからの参加者も増えて、来年はもっと増えるといいなと思っています。個人的にはPyCon USでの初めてのライトニングトークが印象深いです。フルの30分トークは過去に採択されたことはあるんですが、コロナでオンライン化、筆者自身がコロナで急遽不参加と2回ともリアル登壇ができてません。PyCon USでのリアル登壇をいつか…と思っています。
なお、筆者が行っているYouTubeライブ
オフィシャルの発表動画は、PyCon USのYouTubeチャンネルで公開予定です。以下のページで確認してください。
筆者のPyCon US 2024中のツイート