「AIエージェント開発、次はCUDA Python? 試してみる?」~【python】今週の人気記事TOP5(2025/09/28)
【2025/9/28】「AIエージェント開発、次はCUDA Python? 試してみる?」今週の人気記事TOP5(2025/09/28)
CUDA PythonではじめるCUDAプログラミング
この記事では、CUDA Pythonを用いたGPUプログラミングの基礎を解説しています。CPUとGPUのアーキテクチャの違いから、GPUを効率的に使うための原則を説明し、CUDA Pythonの選択肢と、あえて低レベルなCUDA Pythonを使用する理由をPeachモデルを用いて解説しています。
CUDAカーネルの基本的な記述方法を、ベクトル加算を例に説明し、CUDA Pythonによる実行手順を示しました。
しかし、ベクトル加算ではデータ転送のオーバーヘッドによりCPUよりも遅い結果となりましたが、行列積ではGPUが高速になることを示し、今後のチューニングによる効率化に期待を持たせています。
データサイエンスの文脈で理解するデザインパターン
データサイエンスにおけるデザインパターンの活用例を紹介。Factory MethodやAbstract Factoryなどの生成に関するパターン、AdapterやFacadeなどの構造に関するパターン、Template MethodやStrategyなどの振る舞いに関するパターンを、具体的なコード例を交えて解説しています。特に、sklearnやPyTorchなどのフレームワークにおけるデザインパターンの適用例に焦点を当て、データサイエンスの現場でデザインパターンをより身近に感じられるように工夫されています。
AWSコスト見積もりエージェントを自作!Bedrock AgentCoreワークショップで学んだローカルからクラウドデプロイまで
Serverless Days Tokyo 2025のBedrock AgentCoreワークショップで、AWSコスト見積もりエージェントの構築からクラウドデプロイまでを体験。AgentCoreはAIエージェント開発の技術的負債を解消し、開発者はビジネスロジックに集中できる。Strands Agents SDKでローカル開発を効率化。Code Interpreterで安全なコード実行、Runtimeでサーバーレスデプロイ、Memoryで対話履歴を記憶しパーソナライズ提案を実現。AgentCoreにより、複雑なAIエージェントの本番運用が現実味を帯びた。
OpenAI Agents SDKとの5回の試行錯誤でAIエージェント機能実装を成功させた話
エクスプラザのエンジニアunsu氏が、OpenAI Agents SDKを用いたAIエージェント機能開発で5回の設計変更を経て成功した事例を紹介。SDKのマルチエージェント構成でHandoffの不安定さ、非同期処理の課題が判明。最終的にLLMで計画立案、コードで実行制御するアーキテクチャを採用し、課題を解決。LLMとコードの役割分担が重要であり、試行錯誤を通してシステムの本質理解が不可欠と結論。
Julia の World Age と他の JIT 言語の違いをサンプルコードで比較してみた
この記事では、動的言語における関数再定義とJIT最適化の両立について、JuliaのWorld Ageシステムと他のJIT言語(Python, JavaScript, Ruby, JVM, .NET, PyPy)の手法を比較しています。
JuliaはWorld Ageで過去のコードを固定し最適化を維持、invokelatestで最新を呼びます。他の言語は「推測・ガード・最適化解除」で最新定義に追随。各言語は、Hidden Class(JavaScript)、メソッド世代(Ruby)、Tiered JIT(JVM/.NET)、Trace JIT(PyPy)等の技術で動的再定義に対応、型変更や再定義がパフォーマンスに影響します。
【2025/9/21】「非同期処理、使いこなせてる? FastAPIとuvで爆速開発へ!」今週の人気記事TOP5(2025/09/21)
[FastAPI × 外部API]asyncio.to_threadで起きたAPI実行時のフリーズ
FastAPIアプリをAWS App Runnerにデプロイした際、asyncio.to_threadを使った並列処理でAPIがフリーズする問題が発生。原因は、asyncio.to_threadのデフォルトスレッドプールサイズが小さく、同時処理数を超過したため。解決策として、専用のThreadPoolExecutorを使用し、max_workersを明示的に設定。環境ごとのCPU数とスレッドプールサイズ、APIの処理時間、同時アクセス数を考慮した負荷テストの重要性が示された。グローバルロックやグローバルフラグによる問題パターンも解説。
コルーチンとジェネレータを追って泥沼へ:半世紀前のプログラミング言語は動くのか!?
この記事は、コルーチンとジェネレータの関係を歴史的経緯から探求した記録です。Pythonではジェネレータからasync/awaitによるコルーチンへと発展しましたが、「完全なコルーチン」の定義は曖昧です。初期のコルーチンはConwayによって提唱され、ジェネレータはIPL-Vで登場しました。Mouraの論文では、制御移譲機構、ファーストクラスオブジェクトかどうか、スタックフルかどうかでコルーチンを分類しています。RubyのFiberは「完全なコルーチン」の条件を満たしますが、JavaScriptのPromiseはasync/awaitと組み合わせることでコルーチンと言えます。
【VScode】一瞬でできるpythonで自動import
VSCodeでPythonの自動importを有効にするには、settings.jsonに"python.analysis.autoImportCompletions": trueを追加します。これにより、未インポートの関数やクラスの入力時に候補が表示され、選択するとimport文が自動挿入されます。プロジェクト構成によっては、python.analysis.extraPathsでカスタムパスを指定することで、特定のディレクトリ内のモジュールも自動補完対象にできます。Python拡張機能のインストールが必須です。
vLLM V1の実装②:EngineCore
vLLM V1のEngineCoreは、推論処理の中核を担うEngineCore、プロセス分離とZMQ通信を行うEngineCoreProc、データ並列処理を実現するDPEngineCoreProcの3層構造で、推論、スケジューリング、I/O管理を分離し、保守性と拡張性を向上させています。
非同期処理を前提とした設計で、ZMQによるI/Oスレッド分離、バッチキューによるパイプライン並列処理、データ並列処理のウェーブ同期を実現。
プロセス分離による安定性、ZMQによる非同期通信、商用環境を意識した統計情報収集、動的構成変更、ロードバランシング戦略の多様性を実現しています。v0からの進化として、責任分離の明確化、非同期処理の再設計、データ並列処理の対応が挙げられます。
uvで始めるモダンPython開発環境 (uv/Ruff/Pyright/Pytest/Precommit/Github-Actions)
この記事では、Rust製の高速なPythonパッケージマネージャーuvを用いたモダンな開発環境構築について解説します。
uvによるプロジェクト初期化、Ruffによるコードフォーマット/リント、Pyrightによる型チェック、Pytestによるテスト環境構築、Pre-commitによるコミット前チェック、GitHub ActionsによるCI設定までを網羅。VSCodeの設定や、Pydantic Settingsを用いた環境変数管理、開発効率化のTipsも紹介しています。
最終的にGithub Actions上でLint/Format/Typecheck/テストを自動実行する構成を目指します。
【2025/9/14】「Python、次はロボット制御?GPU活用、どこまで進む?」今週の人気記事TOP5(2025/09/14)
dora-rs: これがAI時代のロボティクスミドルウェアだ!
dora-rsは、AI x ロボティクス時代を見据えた、ROSに代わる可能性のあるロボティクスミドルウェア。ROSと比較して、Python環境との親和性が高く、環境構築が容易。データフロー指向アーキテクチャを採用し、ノード間の通信を事前に定義する。ROS2より高速な通信が可能で、CUDAメモリのプロセス間共有もサポート。PyPI/crate.ioでの依存解決に特化することで、MLモデルの統合が容易になり、AIコーディングにも適している。課題は、req/repパターンの未実装と、エコシステムの発展途上である点。
Triton を使って CUDA を書かずに高速な GPU カーネルを実装する
Tritonは、CUDAの知識がなくても高性能なGPUカーネルをPythonライクに記述できる言語。マンデルブロ集合の計算を題材に実験した結果、CPU (4分26秒)に対し、JAXでは194ms、Triton(アンチパターン)では1.12秒だった。最適化されたTritonコード(ブロック処理)では20.3msと、JAXよりも高速になった。Tritonは、特に集約処理においてCUDAより高レベルな記述が可能。
動的計画法ベースの数理最適化ソルバDIDPPyで最短共通超配列問題を解く
動的計画法ソルバDIDPPyを用いて最短共通超配列問題(SCS)を解く方法が解説されています。SCSをDPで定式化し、DIDPPyで実装することで、n,mが大きい場合でも求解可能。特にDual Bound(下界)の設定が重要で、簡単な下界でも性能向上が見込めます。文字列ペアのSCS長を最大値としてDual Boundに利用したところ、解の精度が向上しました。
MIDIをTableauで可視化してアート作品にしてみた
JTUGのViz展示イベント「VizSpace2025 Summer」にて、TableauでMIDIデータを可視化した作品を制作。
PythonのmidoライブラリでMIDIファイルをCSVに変換し、Tableauで音の開始位置(時間経過を角度に変換)と音の高さ(円の中心からの距離)を表現。
計算フィールドで角度、X座標、Y座標を算出し、パスの線のタイプを調整することで、独特なビジュアル表現を実現。
音楽とデータ可視化を組み合わせた、Tableauの新たな可能性を示す試み。
PythonオブジェクトをRustで効率的に処理する - pyo3-arrowによるゼロコピー実装
RustとPythonの連携において、pyo3-arrowを用いることで、データ変換時のオーバーヘッドを削減し、パフォーマンスを大幅に向上させる手法が紹介されています。Apache Arrowをデータ交換の中心に据えることで、NumPy配列などの異なるデータ形式間でのゼロコピーを実現し、メモリ効率を高めます。ベンチマークでは、pyo3-arrowが純粋なPython実装と比較して最大942倍高速であることが示されました。また、unsafeコードを隠蔽し、メモリ安全性を保証する点も強調されています。QuantForgeプロジェクトでの事例では、型変換コードを8割以上削減することに成功しています。
【2025/9/7】「Polars、試してみた? Pandasからの移行、あり?なし?」今週の人気記事TOP5(2025/09/07)
C/C++の世界に閉じこもっていたオジサンがPythonに触れてみる ~基礎編~ 第3/10回
C/C++経験豊富なエンジニアがPythonに触れた際の戸惑いと発見が語られています。Pythonでは変数の型定義が不要なため、柔軟な記述が可能である一方、型エラーに気づきにくいという問題に直面します。しかし、Python 3.5以降の型ヒント機能により、引数に型情報を付与できることを知り、C++との違いに苦しみつつもPythonへの理解を深めていく過程が描かれています。
AIエンジニアリング入門:Pythonによる開発の基礎(uv, Ruff, dataclass, Pyright, Git hooks)
データサイエンス事業におけるAIエンジニアリングスキル習得を目的とした記事です。
Python開発におけるプロジェクト管理とコード品質維持のためのプラクティスを紹介します。
プロジェクト管理には高速なパッケージ管理ツールuvを使用し、venv、poetry、pyenvなどの代替とします。
コード品質管理にはRuffを使用し、コードの静的解析、フォーマットを行います。
また、Pythonの型ヒントとdataclassを活用し、Pyrightで型チェックを実施します。
さらに、Git hooksとpre-commitを使い、コード解析と型チェックを開発ワークフローに組み込みます。
開催報告:【第一回】ケモインフォマティクス×ハッカソン合宿 in 横浜
ケモインフォマティクス分野のハッカソン合宿が横浜で開催されました。参加者はAIやデータサイエンスを活用し、化合物の毒性予測をテーマにチームで課題に取り組みました。ショートプレゼンやBBQ、ボードゲーム等を通じて交流を深め、最終日に成果報告会を実施。最優秀チームが表彰されました。次年度は自然言語処理とケモインフォマティクスの融合をテーマに開催予定です。
「Pandas使うよりPolarsの方がいいよ」は本当かもね??
大規模データ処理において、PolarsがPandasより高速であるか検証した記事。数十万~数百万件のCSVファイルを結合する処理を、PolarsとPandasで実装し実行時間を比較した結果、Polarsの方が大幅に高速だった。Polarsはマルチスレッドで動作する点がPandas(シングルスレッド)より優れている。状況によってPandasの利用も検討しつつ、今後はPolarsの利用を検討するとのこと。
timm で画像の前処理を定義する
この記事では、timmライブラリを用いた画像前処理の方法を解説します。
-
timm.data.create_transform()による簡単な前処理定義: 画像サイズ指定、データ拡張有無、正規化パラメータなどを設定可能。 - 事前学習済みモデルの前処理利用:
timm.data.resolve_model_data_config()とcreate_transform()の組み合わせで、モデル学習時の前処理情報を取得し適用。
これにより、ImageNetの正規化パラメータ取得や、モデルに合わせた適切な前処理を容易に実現できます。
Discussion