【Sentry Profiling】Autofix の遅延問題をどのように解消したのか徹底解説

Article by: Rohan Agarwal プロファイリングと聞くと「インフラコストをスケールに応じて最適化するためのわずかな節約に役立つもの」という誤解を抱いている方が多くいらっしゃいます。いわゆる「ミリ秒単位での削減が全て」というアプローチだと思っていないでしょうか。 しかし実際はそうではありません。私たちは自社のプロファイリングツールを使用し、ユーザーインタラクションを各セッションにおいて数十秒単位の時間短縮を可能にしました。数学がお好きな方のために補足すると、それは「重要なミリ秒」どころか、4桁も大きく異なる数値でした。 この記事では、私たちがどのような課題に直面し、何を発見し、どのようにして解決に至ったのか解説します。そしてプロファイリングが単なるミリ秒の削減にとどまらず、なぜパフォーマンスや顧客体験の向上に欠かせない存在なのかについてもご紹介します。 処理速度は、開発者にとってもユーザーにとっても重要 私たち Sentry 開発チームは、デバッグワークフローの改善に一貫して取り組んできました。 その中で「生成AIを活用するなら、 Autofix というツールを作るのが最適だ」と考えました。Autofix は問題の詳細とコードベースを密接に統合させ、課題の文脈を理解した上で解決策を導き出すツールです。完全に独立して動くのではなく、開発者と一緒に作業しながら根本原因を特定し、正確なコード修正を提案するという少しユニークなアプローチを取っています。 Autofix の本来の目的は「デバッグを速くすること」でしたが、実際に使用してみるとどうにも遅いと感じていました。特にコールドスタート時は鈍く、通常よりも10〜20秒以上も余計に時間を要し、こうした遅延は私たち開発チームだけでなく、初期導入されたお客様にも影響を及ぼしていました。 このままでは Autofix を世に出しても中途半端なものになってしまうのではないかという危機感が高まっていました。何としてもローンチまでにパフォーマンス課題を解決しなければなりません。とはいえ、AI駆動のワークフローをデバッグするのは困難です。 問題はサードパーティのLLMプロバイダーからの遅延応答が原因なのだろうか。だとすると、設計そのものを変更しなければなりません。それともタスクキュー(Celery)が非力なインフラでボトルネックになっているのか… 仮説を確かめるには大掛かりな調査が必要となり、もし仮説通りだったとしても、その対応にはアーキテクチャ全体を見直すような大規模改修につながります。いずれにしても大変です。 そこでふと考えました。 「もしかすると、私たちがすでに持っている可視化データの中にヒントがあるのでは……?」 そこで登場したのが Sentry Profiling です。早期導入ユーザーの実際のデバイスから実行データを分析することで、思いがけない2つのボトルネック、「冗長なリポジトリ初期化」と「インサイト生成中の不要なスレッド待機」を明らかになりました。これらに対し、キャッシュの導入とスレッドの最適化を行ったことで、実行時間は数十秒短縮され、Autofix は大きく向上しました。しかも、アーキテクチャには一切変更を加えていません。 プロファイルとは?どのように活用すればいい? もしすでにご存知であれば、ここは読み飛ばしていただいて構いません。念のため、初めての方に向けて簡単に説明します。 プロファイリングとは、関数の呼び出しや実行時間、リソース使用状況などの情報を本番環境でリアルタイムでキャプチャし、実際のユーザー体験に影響しているCPUやブラウザレベルのパフォーマンス課題を特定するための手法です。 CPUプロファイリングはCPUサイクルがどこで使われているか追跡し、非効率な関数や不要なループ、重たいブロック処理などを見つける際に役立ちます。またブラウザプロファイリングは、主にフロントエンドに焦点を当て、ページの読み込みやレンダリングの遅延、長時間実行されているレンダリングタスクなどの情報を取得することが可能です。最後にモバイルプロファイリングは、ネイティブおよびハイブリッドアプリの画面表示などのパフォーマンスを分析します。 これらのデータは全て「フレームグラフ」として視覚的に表示され、時間経過とともに変化するコールスタックの様子を確認できます。最初は少し慣れが必要になるかもしれませんが、以下のように読み取ることができます。 X軸(時間):コード実行のタイムラインを示します。各ブロックの幅は、関数呼び出しの時間の長さを示します。 Y軸(コールスタックの深さ):関数呼び出しの階層を示し、コードレベルでの関数間の親子関係を示します。 カラーコード:Sentry ではアプリケーションコード、システムコード、シンボル名、パッケージなどに色分けがされており、それぞれを直感的に識別できます。 さらにプロファイルは分散トレースと組み合わせて表示することもできるため、ブラウザ、クライアントCPU、ネットワーク呼び出しの流れをひと目で把握できるようになります。Sentry では個別のプロファイル(単一トランザクションのプロファイル)、集約されたプロファイル(平均的な処理の傾向)、差分プロファイル(コードの変更前後の比較)といった形式でパフォーマンス問題を素早く特定できます。 プロファイリングを有効にするには、アプリケーションの起動時にSDKをできるだけ早く初期化し、profiles_sample_rate オプションを 1.0 に設定することでサンプリングされたトランザクションをキャプチャできます。 例えば、Pythonアプリでは次のように設定します。 問題1:コールドスタートに時間がかかる 問題 Autofix の目的は、アプリケーション内のバグについてできるだけ早く開発者にインサイトを提供することです。しかしルートコード分析を行ったり、コード修正を提案したりするたびに数秒もの明確なスタートアップの遅延が発生し、その後も長時間の処理が続いていました。 これでは最先端のAIエージェントとしては動作が重く、時代遅れに感じられてしまいます。この状況が改善されなければ、開発者はワークフローへの不満を抱き、Autofix が低く評価されてしまう恐れがありました。 […]
【Autofix】AIを使ってプログラムを簡単にデバッグ&修正する方法

Sentryはアプリケーションのコードベースの内部構造について多くのことを知っています。 そこで私たちは、この豊富なデータセットを使って、デバッグをさらに高速化するにはどうすればいいかを考えました。 多くのジェネレーティブAI(GenAI)ツール(GitHub Copilotなど)は、開発環境における開発者の生産性を向上させますが、Sentryのような本番環境でのエラー修正を支援するコンテキストデータを持つものはほとんどありません。 私たちの新しい『AI対応Autofix機能』は、エラーが発生したときにユーザーが何をしているかを理解し、エラーを分析し、修正を生成し、さらにあなたのレビューのためにプルリクエストを開きます。 これは、オンデマンドで支援する準備ができているジュニア開発者を持つようなものです。 Autofixは本番環境でのエラーのデバッグを支援するためのものですが、もし開発中にそのような支援が必要だと感じたら、Codecovの新しいAIコードレビューをお試しください。 AIを搭載したAutofixの仕組み Autofixはエージェントベースのアーキテクチャを使用し、Sentryの問題を評価し修正するプロセスを管理可能な作業単位に分割します。 まず初めに、問題発見エージェントで、問題の予備評価を行い、コード変更で修正可能かどうかを判断します。 次に、プランニングエージェントが、エラーメッセージとお客様のコードベースから関連するコンテキスト情報を使用して、根本的な問題を解決するための実行プランを構築します。 このプランは、修正と付随する単体テストの生成を担当するAutofixの実行エージェントに渡されます。 最後に、PRを生成する前に、すべての変更を最終的にレビューします。 このプロセスは、反復的で透明性があるように設計されています。 システムは、積極的にコンテキストとフィードバックを求めながら進み、各ステップの結果は、開発者にとってなじみのあるCIライクなインターフェイスで表示されることも特徴的です。 IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。
2024年、AIエンジニアになるために知っておくべきこと、できること。

2024年、AIエンジニアになるために知っておくべきこと、できること。 AI開発の分野は、音声認識、画像認識、ビジネスプロセス管理、医療診断などAIの能力によって、タスクに革命をもたらし急成長しています。 高度なコード生成ツールを導入することで、ソフトウェア開発に変革をもたらしています。 この業界全体の変化は、日本のみならず世界中のソフトウェアエンジニアにとって重要な岐路となります。ソフトウェアエンジニアは今、厳しい現実に直面しています。恐らく今後、あなたが現在報酬を得ているスキルの一部は、AIによって100%自動化されるでしょう。 そんなAIに劣らない技術を維持するためには、エンジニアはAI技術と多くのアプリケーションを受け入れられるようにスキルセットを変えなければなりません。 しかし、重要なのはこの転換を「どのように行うか」ということです。 何を理解しなければならないのか? AIを使った開発を熟達するためにエンジニアはどのようなステップを踏むべきなのか? 多くのエンジニアは、業界と必要なスキルを理解する時間を取ろうとしません。 この記事では、必要なスキル、求人の種類、AIエンジニアとして成功するための重要なステップについて解説していきます。 AIエンジニアは実際に何をするのか? AIエンジニアへの転職を成功させるためには、エンジニアはまずAIエンジニアが実際に何をするのかを深く理解する必要があります。 AIエンジニアは、機械学習やディープラーニングのニューラルネットワークを用いたAIモデルの開発を担当しています。ニューラルネットワークがどのようなものなのかについては割愛します。 AIエンジニアの責務 AIエンジニアは、AIをより広範な組織の枠組みに統合する上で極めて重要な役割を果たします。その責務は以下の通りです。 機械学習モデルをAPI(Application Programming Interface)に変換し、様々なアプリケーションへの統合と活用を可能にする。 AIモデルを一から構築し、プロダクトマネージャーや利害関係者を含むさまざまな組織部門にその利点を説明する。 データの取り込みと変換のためのインフラを構築し、効率的なデータの取り扱いと処理を保証する。 データサイエンスチームが使用するインフラを自動化し、効率性と生産性を高める。 統計分析を実施し、組織の意思決定のために結果を洗練させる。 AI開発と製品展開のインフラを確立し、維持する。 AI統合を成功させるためには、様々な組織チームとの連携が不可欠であるため、チームワークに優れていること。 AIエンジニアになるために必要なスキル AIエンジニアを目指すプロフェッショナルたちは、この分野で求められるスキルについて知っておく必要があります。その中には以下のようなものがあります。 テクニカルスキル プログラミング・スキル AIエンジニアになるために必要なスキルの第一はプログラミングです。 AIに精通するためには、Python、R、Java、C++などのプログラミング言語を習得し、モデルを構築・実装することが極めて重要です。 線形代数、確率、統計 隠れマルコフモデル、ナイーブ・ベイズ、ガウス混合モデル、線形判別分析など、さまざまなAIモデルを理解し実装するには、線形代数、確率、統計の詳細な知識が必要となります。 Sparkとビッグデータ技術 AIエンジニアは、テラバイトやペタバイト単位のストリーミングや、リアルタイムの本番レベルの大量データを扱うことが多いです。このようなデータを扱う場合、エンジニアはSparkやその他のビッグデータ技術について知っておく必要がある。Apache Sparkの他にも、Hadoop、Cassandra、MongoDBなどのビッグデータ技術を使用することが求められます。 アルゴリズムとフレームワーク 線形回帰、KNN、Naive Bayes、Support Vector Machineなどの機械学習アルゴリズムの仕組みを理解すれば、機械学習モデルを簡単に実装できます。 さらに、非構造化データでAIモデルを構築するには、深層学習アルゴリズム(畳み込みニューラルネットワーク、リカレント・ニューラル・ネットワーク、生成敵対ネットワークなど)を理解し、フレームワークを使って実装する必要があります。 人工知能で使われるフレームワークには、PyTorch、Theano、TensorFlow、Caffeなどがあります。 人間力 成功するエンジニアと苦戦するエンジニアの違いは、ソフトスキルに根ざしていることが多いです。 AIエンジニアは主に技術的な仕事ですが、他者と効果的にコミュニケーションをとり、問題に対処し、時間を効果的に整理し、他者と協力して仕事をする能力は、プロジェクトが問題なく完了し、納品されるかどうかを決定する重要な要素でもあります。 AIを効果的に導入するには、社内の複数の部門が効果的に協力する必要があります。MLパイプラインやAIを活用したアプリケーションを効果的に構築、デプロイ、維持するためには、データエンジニア、データサイエンティスト、ドメインエキスパート、ソフトウェアエンジニアなどが協力し合う必要があります。 異なるチーム間で効果的な協力者となるためには、以下のようなスキルを身につけることが重要です。 コミュニケーション・スキル 人工知能エンジニアが話をしなければならない相手は、幅広い能力レベルの異なるメンバーたちです。 […]