Python

GPUを使った分散処理で見落としがちなCPUボトルネックとtasksetによる解決法

日々の開発Tips

GPUを使った分散処理で見落としがちなCPUボトルネックとtasksetによる解決法

こんにちは! 複数枚のGPUをつかった並列処理システムを設計しているときCPUについてはあまり考えないでシステムを設計してしまうことがあります。 「機械学習システムの主役はGPUなんだから、CPUなんて、あんまり気にしなくてよいのでは」 いいえ、そうでもないんです。 推論中のあるタイミングに急に動作が遅くなったりするときCPUが原因であることがけっこうあります。 概要(5分で分かる要点) 先日GPUを使った並列処理システムで、予期しないCPUボトルネックが発生し、パフォーマンスが大幅に低下する問題に遭遇しました。 複数のプロセスが異なるGPUを使用しているにも関わらず、処理が極端に遅くなる現象の原因は、処理パイプラインの一部に含まれるCPU集約的な計算処理でした。 問題の症状 * 単一プロセス実行時:正常な速度 * 複数プロセス並列実行時:処理時間が数倍に増加 * GPUリソースに競合なし(nvidia-smiで確認済み) 根本原因 処理パイプラインにGPUに適さないCPU集約的な計算(データ前処理、統計変換など)が含まれており、複数プロセスが同じCP

By Qualiteg プロダクト開発部
Model Context Protocol完全実装ガイド 2025- 仕様変遷から最新Streamable HTTPまでの全て

LLM

Model Context Protocol完全実装ガイド 2025- 仕様変遷から最新Streamable HTTPまでの全て

こんにちは! 現在、LLM業界で破竹の勢いでひろまっているMCPについて、本日はとくに実装面について解説していきたいとおもいます。 MCP、MCPとひとくちにいっていますが、実は短期間でけっこう「標準」とよばれる仕様が変化しておりますので、仕様のバリエーションを順を追って解説しつつ、実際に実装をしていきたいとおもいます。 さて、MCPですが、2024年後半、Anthropicが発表したModel Context Protocol(MCP)は、AI分野における重要な転換点となりました。 従来、各AIベンダーが独自に実装していたツール呼び出し機能(tool useと呼びます)を標準化し、AIモデルと外部システムの連携を統一的に扱える仕組みを提供しました 本記事で、MCPの誕生から現在に至るまでの技術的変遷を詳細に追いながら、2025年時点での最適な実装方法を完全なソースコードと共に解説します。特に、仕様の変化に振り回されがちな実装者の視点から、なぜ現在の形に収束したのか、そして今後どのような実装アプローチを取るべきかを明確にしていきます。 第1章 MCPが解決しようとした問題

By Qualiteg プロダクト開発部
Pythonの落とし穴:__len__メソッドを実装したらオブジェクトの真偽値判定が変わってしまった話

Python

Pythonの落とし穴:__len__メソッドを実装したらオブジェクトの真偽値判定が変わってしまった話

こんにちは! Pythonでカスタムクラスを作成していて、 「オブジェクトは存在するのにif文でFalseと判定される」 という不可解な現象に遭遇したことはありませんか? この記事では、__len__メソッドを実装することで生じる、予期しない真偽値判定の挙動について解説いたします! 実際に遭遇したバグ ユーザーの投稿を管理するクラスを実装していたときのことです class PostManager: """ブログ投稿を管理するクラス""" def __init__(self, user_id): self.user_id = user_id self._posts = [] self._cache = {} def __len__(self): """投稿数を返す""" return len(self._posts) def add_post(

By Qualiteg プロダクト開発部
その処理、GPUじゃなくて勝手にCPUで実行されてるかも  ~ONNX RuntimeのcuDNN 警告と対策~

日々の開発Tips

その処理、GPUじゃなくて勝手にCPUで実行されてるかも ~ONNX RuntimeのcuDNN 警告と対策~

こんにちは! 本日は、ONNX RuntimeでGPU推論時の「libcudnn.so.9: cannot open shared object file」エラーの解決方法についての内容となります。 ONNX Runtimeを使用してGPU推論を行う際、CUDAプロバイダの初期化エラーに遭遇することがありますので、このエラーの原因と解決方法を解説いたします。 エラーメッセージの詳細 [E:onnxruntime:Default, provider_bridge_ort.cc:2195 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1778 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load

By Qualiteg プロダクト開発部
Python仮想環境でハマった依存関係エラーの解決方法

日々の開発Tips

Python仮想環境でハマった依存関係エラーの解決方法

こんにちは!今日は入れた覚えの無いパッケージが引き起こす「あるある」な謎エラーと原因について記載します。 今回の環境は Windows に Python,Anaconda を入れた状態で発生した例ですが、Linuxでも本質的には同じだとおもいます。 グローバル環境の汚染が原因だった話 問題の発生 Pythonプロジェクトの環境構築中、必要なパッケージをインストールしていたら、突然エラーメッセージが表示されました。 pip install opencv-python==4.8.1.78 実行後に表示されたエラー ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following

By Qualiteg プロダクト開発部
Anaconda base環境を初期状態にリセットする方法

Python

Anaconda base環境を初期状態にリセットする方法

こんにちは!Anacondaを使っていて、うっかりbase環境に余計なパッケージをインストールしてしまった経験はありませんか? 私も先日、FastAPIをbase環境にインストールしてしまい、依存関係がぐちゃぐちゃになってしまいました。 この記事では、Anacondaのbase環境を安全に初期状態に戻す方法を解説します。 なぜbase環境は触ってはいけないのか base環境はAnacondaの基盤となる環境です。ここに直接パッケージをインストールすると・・・ * 依存関係の競合が発生しやすい * Anaconda自体の動作に影響を与える可能性がある * 他の仮想環境の作成に問題が生じることがある そのため、プロジェクトごとに仮想環境を作成して作業するのがベストプラクティスです。 base環境をリセットする3つの方法 方法1: 最近の変更だけを元に戻す(軽症の場合) まず、最近何をインストールしたか確認します # リビジョン履歴を確認 conda list --revisions 出力例 2024-01-15 10:30:15 (rev 3)

By Qualiteg プロダクト開発部