見出し画像

PyCon JP 2024 参加報告

こんにちは!PKSHA Technology でエンジニアリングマネージャーをしている古屋です。2024 年 9 月 27 日(金)〜 9 月 29 日(日)に開催された「PyCon JP 2024」に、弊社はゴールドスポンサーとして協賛しています。当日は私の他にソフトウエアエンジニアの加藤・林・梅田と、人事/広報を担当している内藤の計 5 名で参加しました。

カンファレンス前日に note もリリースし、初協賛ということでブースにどんな方が来てくれるのか楽しみに当日を迎えました。

本記事では、PyCon JP 2024 で印象に残ったいくつかのセッションを振り返りつつ、今回初参加という立場から感想もお届けしたいと思います。

古屋 太郎(株式会社PKSHA Communication プロダクト開発統括部 部長)
ソーシャルゲーム企業にてバックエンドエンジニア、エンジニアリングマネージャーを担当。その後データ系スタートアップにて IoT や ML など含め幅広いエンジニアリングの経験を経て、現在は PKSHA Communication にて コンタクトセンター向け AI SaaS プロダクトの開発チームのマネジメントを行っている。

大会概要

PyCon JP は、Python ユーザが集まり、Python や Python を使ったソフトウエアについて情報交換、交流をするためのカンファレンスです。 PyCon JP の開催を通じて、Python の使い手が一堂に会し、Python にまつわる様々な分野の知識や情報を交換し、新たな友達やコミュニティとのつながり、仕事やビジネスチャンスを増やせる場所とすることを目標にしたカンファレンスです。

なぜ PKSHA がPyConJP に協賛しているのか

PKSHA Technology は 2012 年の創業以来、「未来のソフトウエアを形にする」というミッションのもと、Research、AI Solution、AI SaaS などさまざまな事業を通して最先端技術の社会実装を実現してきました。その中でアルゴリズムそれ自体の研究開発をはじめ、AI Solution では大部分の案件で、また一部の AI SaaS プロダクトでも Python を用いて開発を行っています。

これまで各種の学会への協賛は行ってきましたが、今回は社内でも多くの部分で使用している Python のコミュニティへも貢献できればと考え、PyCon JP に協賛させていただきました。

ブース紹介

ブースでは、会社紹介のパンフレット、ロゴ入りトートバックの他に、採用 X をフォローするともらえるオリジナルマグカップと HHKB(Happy Hacking Keyboard)専用キーキャップを用意していました。

特に HHKB のキーキャップは「これ何?」と足を止めてくださる方が多く、他社のノベルティともあまり被っていなかったようで大好評でした。

HHKB(Happy Hacking Keyboard)専用 PKSHA キーキャップ

また、既に PKSHA を知ってくださっている方、名前は聞いたことがあるけれどどんな会社か知らなかったという方、全く知らなかったという方まで大変多くの方にブースに立ち寄っていただき、コミュニティの幅広さを感じました。この機会に PKSHA を知っていただいた方々、興味を持っていただいたみなさん、ありがとうございました。

来場者で賑わう PKSHA ブースの様子
想定していたよりも英語話者が多く、英語での会社説明をする一面も

また、カンファレンスの参加ストラップに自由につけることができるタグやシールが用意されており、属性やジェンダー代名詞(プロナウン)、写真撮影の可否などを伝えることができるようになっていたのが印象的でした。参加者同士のコミュニケーションが円滑になるよう様々な配慮や工夫をしていただき、運営スタッフの皆様には改めて感謝をお伝えしたいです。

名札を作成するデスクの一部

気になったセッションの紹介

Unlocking the Parallel Universe: Subinterpreters and Free-Threading in Python 3.13

発表資料/発表者: Anthony Shaw)
python 3.12 で追加された sub interpreters と、3.13 で追加された free-threading についての解説セッションでした。どちらの機能も利用用途によっては、python で記述された並列処理の高速化を図ることができます。Python には、GIL(Global Interpreter Lock)というものがあり、実行環境の CPU のコア数に関係なく一度に一つのスレッドしか実行できないようになっています。

GIL はスレッド間の競合が防ぎ、メモリ管理を容易にしてくれますが、マルチスレッドで実行しても GIL が原因で同時に一つのスレッドしか動かすことができず、並列化の恩恵を受けることができません。python 3.11 までは、process に GIL がかかっていましたが、python3.12 で導入された sub interpreter では、GIL 制約がかかった interpreter を process が複数持つことができるようになりました。process ではなく、interpreter に GIL がかかっていることで、異なる interpreter が持つ thread を同時に動かすことができるようになりました。さらに、python 3.13 からは GIL を無効化することができるようになりました(free-threading)。

これにより、processにGIL が存在しないため一つの interprer 内の thread を複数同時に実行することができます。Python 3.13 で GIL を有効・無効にした場合で円周率を 2000 桁まで計算する場合、multi threads での実行は 2.41 秒から GIL を無効化することで 0.75 秒まで短縮されたことが紹介されていました。また結論として、長期実行されるワーカーでは、sub interpreter は multi processing よりも sub interpreter が優れており、free threading はデータやり取り時のスレッドプーリングなどでの利用が考えられると紹介されてました。

Python の sub interpreters や free-threading の導入は、GIL の制約を大きく緩和し、並列処理の高速化に寄与する画期的な進化です。今後、これらに Python エコシステムが対応することで、より広範な活用とさらなるパフォーマンス向上が期待され、引き続き動向を注視していきたいと感じました。

An overview of the optimisation pipeline in CPython 3.13 and onwards

発表資料/発表者: Jules Poon, 所属: National University of Singapore)

Python の実装で最も使われている CPython における、 JIT 最適化の手法について解説した発表でした。CPython は、ソースコードをバイトコードにコンパイルし、それを実行することにより動作します。Python 3.11 のコードであれば下記あたりがその実行部に当たります。

また、Python では動的型付け言語であるため、例えば変数の足し算の処理があった際には毎回変数の型をチェックし演算を行っています。しかしながら、現実のコードでは特定のコードを見ると大抵固じ型が渡されるため、実行時の情報を元に専用の命令に置き換えることにより高速化を行うことができます。具体的には 3.11 の時点で 2 命令までの最適化は行われていました。3.13 以降ではそれを拡張し、より広域な範囲で最適化を行うような実装が行われています。この発表では、特に 3.11 時点でのバイトコードから最適化にあたって、正しくかつ安全にメンテナンスのしやすい形での実装方法について発表されていました。

広範なバイトコードの最適化のためには、通常の実行の実装だけでは使い物にならず、どのような型に対してどのような処理が行われたのかという抽象化された実行情報を取得する必要性があり、そのために2重のバイトコードのインタプリタ実装が必要になります。この 2 重実装を避けるために、まず 3.12 において独自の DSL を定義し、それによってバイトコードを定義するように変更し、次に 3.13 において追加で最適化のためのバイトコードを追加することによって、インタプリタの二重実装を抑えるようになっているとのことです。

また、今後の実装の展望についても触れられ、3.13 において追加されたトレース結果から最適化されたバイトコードを生成し、それを JIT コンパイラでコンパイルすることによって高速化する点についての今後の具体的な実装案も複数説明されていました。特に関数のインライン展開については非常に効果がありそうであるため是非とも実装されて欲しいとの感想を持ちました。
JIT コンパイラも含め、汎用性と互換性を保ちながらも高速化を達成しようという方向性の模索は非常に興味深く、今後の発展が楽しみな技術であるなと強く感じました。

Rust を活用した Python ライブラリの開発

発表資料/発表者: Shota Kokado, 所属: RevComm, Inc.)
このセッションでは、Rust で Python ライブラリを開発する方法について紹介されていました。最近、Rust で書かれた Python ライブラリが増えてきていて、業務でも Polars や Pydantic などをよく利用しています。Rust を業務で利用することはあまりないですが、個人的に最近好きな言語というのもあり、気になったので聞きに行きました。

セッションでは PyO3 と maturin を利用して Python ライブラリを開発する方法の紹介や、pydantic-core の Rust 部分が解説されていました。また、L2 ノルムの計算を Python, Cython, Rust(PyO3)のそれぞれで実装したベンチマーク結果も紹介されていました。

Rust(PyO3)による L2 ノルム計算は、Python よりも 3 倍程度早かったですが、Cython より 70% 程遅いという結果になっていました。Cython と Rust(PyO3)の実行結果が同じくらいになると思っていたので、驚きでした。PyO3 にはまだ最適化の余地があるかもしれないとのことで、今後も Rust x Python の進化は注目していきたいと思います。

懇親会での様子

初日の夜には、全体パーティーが開催されました。
会場はスポンサーブースが並ぶホールで、お酒を飲んだり食事をしながら、参加者同士で交流を深めました。運営の方によると、スポンサーホールでパーティーを行うのは今回が初めての試みだったそうです。一度ブースに訪れた方とさらに深い技術的な話で盛り上がったり、他のスポンサーとブースのコンテンツについて意見交換をしたりと、楽しい時間を過ごしました。

また、2 日目の夜には、スピーカーやスポンサー、運営メンバーを対象としたウェルダンパーティーも開催されました。

ウェルダンパーティーの様子

参加したセッションのスピーカーの方と議論を交わしたり、運営メンバーと広島で開催される来年の PyCon JP 2025 について話し合ったりと、真面目な話もありましたが、PKSHA とご縁ある方との近況報告や、海外からの参加者と海外旅行について話すなど、和やかな会話もありました。

まとめ

今回 PKSHA として初めての協賛企業としての参加でしたが、数多くの興味深いセッションに加え、スポンサーブースにて多くの Pythonista の方々とお話しする機会を得られ、とても楽しかったですし大きな学びにもなりました。お話しした方々も社会人の方だけでなく学生の方や英語話者の方など多様性があり、コミュニティの大きさと盛り上がりを改めて感じました。

今後も PyCon JP に限らずソフトウエアエンジニアリングに関する技術コミュニティへ継続的に貢献して盛り上げていきたいと考えています。改めまして PyCon JP 運営の皆様貴重な機会をありがとうございました。また Python コミュニティの皆様、暖かく迎え入れてくださりありがとうございました。来年もまたお会いしましょう。

―INFORMATION―
▼ 26 年新卒向け:ソフトウエアエンジニア

▼ 26 年新卒向け:アルゴリズムエンジニア

▼ 中途採用:ソフトウエアエンジニアの募集要項はこちら

▼ 中途採用:アルゴリズムエンジニアの募集要項はこちら

▼ PKSHA 採用サイト

▼ Wantedly はこちら