日々の開発Tips

GPUサービスで「Segmentation Fault 」に出会ったら~分析から解決までの実践アプローチ~

NumPy/PyTorch

GPUサービスで「Segmentation Fault 」に出会ったら~分析から解決までの実践アプローチ~

こんにちは! 今日は仮想環境+GPUなサービスにおける「Segmentation Fault」について、分析と対処法について書いてみたいと思います。 Segmentation Faultの本質と特徴 Segmentation Faultは、プログラムが保護されたメモリ領域にアクセスしようとした際にOSが発生させる例外です。 今回は複数のGPUサービス(つまりGPUを使うプロセス)が動作していて、そのうちの1つを再起動したときに発生しました。 毎回発生するわけではありません。むしろ数百回の起動に1回程度ですが、1回でも発生すると絶望的な結果につながります。というのも、1つのGPUサービスの停止が SPOF となってサービス全体に影響が発生します。かつ、1回でも「Segmentation Fault」が発生してしまうと、その原因となったプロセスが二度と起動しなくなる、というやっかいな現象でした。 このように「普段は正常に動作しているのに突然動かなくなる」というのがデバッグを非常に難しくします。 とくにGPU+仮想化の組み合わせで従来のC++アプリよりも発生確率がぐっとあがる印象

By Qualiteg プロダクト開発部
シェルスクリプトからcondaコマンドを活用したいとき

日々の開発Tips

シェルスクリプトからcondaコマンドを活用したいとき

こんにちは! 今日はみんな大好きcondaコマンドについてです。 condaコマンドで仮想環境に入って、何らかの処理をして、戻ってくる ようなシェルスクリプト、バッチタスクをやるときのTipsです。 AI開発において、Anacondaとその中核であるcondaパッケージマネージャーはとっても重宝します。 しかし、シェルスクリプトから自動的にcondaを利用しようとすると、意外なハードルがあります。 本記事では、シェルスクリプトからcondaコマンドを正しく呼び出す方法について解説します。 condaと非対話モードの課題 AnacondaがインストールされているLinux環境において、condaコマンドは通常、.bashrcや.bash_profileなどの設定ファイルによって初期化されます。 なんとなくシェルをつかっていると、このcondaコマンドの初期化を忘れてしまいますが、これらの設定は多くの場合シェルの「対話モード」でのみ有効になるように設計されています。 ゆえにシェルスクリプトのような非対話モードでは、condaコマンドが正しく機能してくれません 例えば、.b

By Qualiteg プロダクト開発部
Node.jsで大容量ファイルを扱う:AIモデルのような大きなデータ保存はストリーム処理使いましょう

日々の開発Tips

Node.jsで大容量ファイルを扱う:AIモデルのような大きなデータ保存はストリーム処理使いましょう

こんにちは!今日はAIシステムのフロントサーバーとしてもよく使用するNode.jsについてのお話です。 AIモデルの普及に伴い、大容量のデータファイルを扱う機会が急増しています。LLMなどのモデルファイルやトレーニングデータセットは数GB、場合によっては数十、数百GBにも達することがあります。 一方、Node.jsはWebアプリケーションのフロントサーバーとして広く採用されており、データマネジメントやPythonで書かれたAIバックエンドとの橋渡し役としてもかなりお役立ちな存在です。 本記事では、Node.js v20LTSで5GB程度のファイルを処理しようとして遭遇した問題と、その解決方法について解説します。 Node.jsのバッファサイズ制限の変遷 Node.jsのバッファサイズ制限は、バージョンによって大きく変化してきました Node.jsバージョン サポート終了日 バッファサイズ上限 備考 Node.js 0.12.x 2016年12月31日 ~1GB 初期のバッファサイズ制限(smalloc.kMaxLength使用) Node.js 4.

By Qualiteg プロダクト開発部
PythonとWSL開発のトラブルシューティング: PyCharmとCondaの環境不一致問題

日々の開発Tips

PythonとWSL開発のトラブルシューティング: PyCharmとCondaの環境不一致問題

こんにちは! 今回は、WSL上のConda環境をPyCharmから利用する際に発生した「同じ環境なのにパッケージリストが一致しない」という問題に遭遇したため、その原因と対策について書いてみたいとおもいます 問題の状況 開発の流れは以下のようなものでした 1. WSL環境でConda仮想環境を作成 2. その環境をPyCharmのプロジェクトインタプリタとして設定 3. 開発を進める中で奇妙な現象に気づく 具体的には、次のような不一致が発生していました * PyCharmのプロジェクト設定で表示されるpipパッケージのリスト * WSLでConda環境をアクティベートした後にpip listコマンドで表示されるパッケージのリスト これらが一致せず、「WSL側のシェルから直接インストールしたパッケージがPyCharmで認識されない」という問題が生じていました。 この手の問題でよくある原因は、PyCharm側がWSL側の更新を得るのに少し時間がかかったり、 Indexing が遅れているなどなのですが、今回はそれが原因ではありませんでした。 危険な「静かな

By Qualiteg プロダクト開発部
GPUサーバーの最適容量計算: キューイング理論と実践的モデル

IT & AIテクノロジー

GPUサーバーの最適容量計算: キューイング理論と実践的モデル

最大ユーザーサポート数計算ツール 同時に1件のみ処理できるGPU変換サーバーの最大ユーザーサポート数を計算します 処理時間 (t_p) 分/件 1件の変換処理にかかる時間 目標システム利用率 (ρ) 0 〜 1 安定稼働のための目標稼働率(推奨: 0.7〜0.8) ピーク係数 (P_c) 倍 最も混雑する時間帯の平均アクセス倍率 稼働時間 (H) 時間/日 システムが1日に稼働している総時間 アクセス確率 (P_a) 0 〜 1 1人のユーザーが1日にシステムを利用する確率 1ユーザーあたりの変換回数 (F) 回/日 利用する日の平均変換処理回数 計算過程を表示 計算結果 サポート可能な総ユーザー数: 人 計算式: N = (ρ × μ × H) ÷ (P_a

By Qualiteg プロダクト開発部
WSL2でDNS解決がうまくいかない問題と解決方法

日々の開発Tips

WSL2でDNS解決がうまくいかない問題と解決方法

こんにちは! Windows Subsystem for Linux (WSL2)は、Windows上でLinux環境を利用できる素晴らしい機能ですが、中にはDNS解決に関する問題が発生することがあります。この記事では、その症状と効果的な解決方法を紹介します。 検証環境 この記事で紹介する方法は、以下のバージョンで検証しています WSL バージョン: 2.4.13.0 カーネル バージョン: 5.15.167.4-1 WSLg バージョン: 1.0.65 MSRDC バージョン: 1.2.5716 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26100.1-240331-1435.ge-release Windows バージョン:

By Qualiteg プロダクト開発部
Windows Terminal で「無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。」が出たときの対処法

日々の開発Tips

Windows Terminal で「無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。」が出たときの対処法

何度か、WSL にいろんなバージョンのLinux を入れたり消したりしたときに遭遇した現象です ユーザー設定の読み込み中にエラーが発生しました 無効な "icon" を持つプロファイルが見つかりました。既定では、そのプロファイルにアイコンはありません。"icon" を設定するときは、値が画像への有効なファイルパスとなっていることをご確認ください。 が発生するときの原因と対象法のレポートです 原因 使われなくなったゾンビ・プロファイルがWindows Terminal (のキャッシュ)に残り続ける 対処法 このメッセージを解消するには、いったん、プロファイルをリセットする必要がありました。 ※既存プロファイル設定が消える場合があるので留意すること Step1 Windows Terminal を落とす Windows Terminal をいったんすべて落とす Step2 settings.json を消す エクスプローラーで settings.json のあるフォルダに移動しファイルを削除する %LOCALAPPDATA%\Packages\Micros

By Qualiteg プロダクト開発部
本番運用におけるPyTorch+CUDAサーバーでの「Unknown Error」問題とその対策

NumPy/PyTorch

本番運用におけるPyTorch+CUDAサーバーでの「Unknown Error」問題とその対策

こんにちは!Qualitegプロダクト開発部です。 今日は、GPUをつかった商用サービスにて悩ましい、テストは全部通るけど、長時間運用をしていると急に起こる「CUDA error: unknown error」についての内容です。 これ、出会うと残念な気持ちになりますが、けっこうGPU商用サービス界隈では「あるある」なんです。 原因を真面目に探るには CUDAバージョン、PyTorchバージョンの調合具合、実際のアプリケーションコードまですべてソースまで追う必要があるのですが、多くの場合、運用でカバーします。 なぜなら仮に1つ原因をみつけて対処できたとしても、CUDAバージョンはしょっちゅうあがりますし、PyTorchもそれに追従して頻繁に更新されます。さらにやっかいなことに、1日、2日、いや1週間くらいは安定的に動作しているようにみえて、数週間後にとつぜんエラーが出るといった具合なので、修正確認の難易度が高いんです。 そこで本日は「開発環境や実験環境」ではなく「本番環境」で発生しがちなこのCUDA Unknown Error について問題の原因と実践的な対策につい

By Qualiteg プロダクト開発部
Windowsで巨大ファイルを含むフォルダをZIP(無圧縮)に格納する方法

日々の開発Tips

Windowsで巨大ファイルを含むフォルダをZIP(無圧縮)に格納する方法

こんにちは! 複数の大容量のファイルを含むフォルダをバックアップやアーカイブする際、ZIPファイルに格納することがよくあります。 しかし、既に圧縮済みのファイル(動画、画像、PDFなど)を再圧縮すると、処理時間がかかる割に圧縮効果が少かったり、圧縮にものすごく時間がかかってしまうことがあります。別に容量を制限したいわけでなく、単に複数のファイルを単にひとまとめにしたいときには「無圧縮ZIP」(ストアモード)が1つの選択肢となります。 この記事では、特に巨大ファイル(数GB〜数十GB)を含むフォルダを無圧縮ZIPに格納する方法について解説します。 Windows標準機能の限界 Windows Explorerの標準ZIP機能では、ファイルを右クリックして「送る」→「圧縮(zip形式)フォルダー」を選択できますが、これには2つの問題があります 1. 無圧縮(ストアモード)を選択するオプションがない 2. いちいち圧縮してしまうので大容量ファイルの処理に時間がかかる PowerShellの無圧縮ZIPコマンドと制限 PowerShellにはCompress-Archi

By Qualiteg プロダクト開発部
Windowsであるポート番号をListenしてるプロセスが何か知る方法

日々の開発Tips

Windowsであるポート番号をListenしてるプロセスが何か知る方法

Windows(サーバー)で、あるポート番号を誰がListenしてるかを知る方法です。 対話式でやる方法 1回目のコマンド netstat -ano | findstr ":443" | findstr "LISTENING" これでプロセスID(PID)が判明する 実行結果 TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 20220 TCP [::]:443 [::]:0 LISTENING 20220 2回目のコマンド tasklist /fi "PID eq 20220" 実行結果 イメージ名 PID セッション名

By Qualiteg プロダクト開発部
[vLLM] To use CUDA with multiprocessing, you must use the 'spawn' start method の対処法

LLM

[vLLM] To use CUDA with multiprocessing, you must use the 'spawn' start method の対処法

WSLで vLLM を使用するとき、 tensor parallel を使って複数枚のGPUで1つのLLMをサーブしようとしたとき以下のようなエラーが発生しがちです RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method 遭遇するシーンとしてはvLLMの起動オプションに以下のようにテンソル並列化オプションを指定したときです。 --tensor-parallel-size 2 つまり、マルチプロセッシングでCUDA使うときは、 "fork"じゃなくて"spawn" 使ってね、というエラーです。 これを vLLM に教えるために、以下の2行目のように環境変数を設定してあげるとvLLMが "spawn" を使ってくれるようになります。 export

By Qualiteg プロダクト開発部
Node.jsのUUID生成を極める:crypto.randomUUID() vs 通常のUUID

日々の開発Tips

Node.jsのUUID生成を極める:crypto.randomUUID() vs 通常のUUID

こんにちは! 今回は、Webフロントで活躍するNode.jsでのUUID生成について、特にcrypto.randomUUID()と従来の方法の違いを解説します! はじめに UUIDは一意の識別子として広く使用されていますが、Node.jsには複数の生成方法があります。 crypto.randomUUID()の使用方法 import { randomUUID } from 'crypto'; const id = randomUUID(); console.log(id); // 例:'123e4567-e89b-12d3-a456-426614174000' または、以下のように書いてもいいですね import crypto from 'crypto'; const id= crypto.randomUUID(); 主な特徴 * 暗号学的に安全な乱数生成器を使用 * 追加のパッケージインストールが不要 * パフォーマンスが最適化済み * UUID v4形式を生成 従来のUUID生成方法 import

By Qualiteg プロダクト開発部
「Windowsターミナル」を Windows Server 2022 Datacenter エディションに手軽にインストールする方法

日々の開発Tips

「Windowsターミナル」を Windows Server 2022 Datacenter エディションに手軽にインストールする方法

こんにちは! 本稿はWindows Server 2022 Datacenterエディションに「Windowsターミナル」をインストールする方法のメモです。 ステップバイステップでやるのは少し手間だったので、Powershellにペタっとするだけで自動的にインストールできるよう手順をスクリプト化しました。 管理者権限で開いた Powershell に以下、スクリプトをペタっとすると、後は勝手に「Windowsターミナル」がインストールされます。 (ただしスクリプトの実行結果の保証も責任も負いかねます) なにが手間か 何が手間かというと、Windows Server 2022 では、StoreもApp Installer(winget)もデフォルトではインストールされていないため「Windowsターミナル」をマニュアルでインストールしなければなりませんでした。 そこでペタっとするだけのスクリプト化 管理者権限で開いたPowershellに以下のスクリプトをペタっとすると「Windowsターミナル」が無事インストールされます。 パッケージのダウンロード先には [ユーザ

By Qualiteg プロダクト開発部
Windows Terminal強制使用を制御する~ForceV2設定ガイド~

日々の開発Tips

Windows Terminal強制使用を制御する~ForceV2設定ガイド~

こんにちは! 最近のWindows 10/11では、従来のコマンドプロンプトの代わりにWindows Terminalが自動的に起動するようになっています。この動作を制御するのが「ForceV2」という設定です。この記事では、ForceV2の詳細と設定方法について解説します。 【ご注意】本稿ではレジストリ操作について扱っています。レジストリの変更は慎重に行う必要があり、誤った操作によってシステムに影響が出る可能性もございます。操作の前にはシステムのバックアップをお取りいただくことをお勧めいたします。 記事の内容は一般的な情報提供を目的としており、お客様の環境によっては動作が異なる場合もございます。操作の実行はご自身の判断と責任のもとでお願いいたします。 ForceV2とは? ForceV2は、Windowsのレジストリで管理される設定値で、コマンドプロンプトの動作を制御することができます * 値が1(デフォルト):新しいWindows Terminalが強制的に使用されます * 値が0:従来のコマンドプロンプト(conhost.exe)が使用されます この設定

By Qualiteg プロダクト開発部
Windows 11の右クリックメニューを従来のWindows 10スタイルに戻す方法

日々の開発Tips

Windows 11の右クリックメニューを従来のWindows 10スタイルに戻す方法

Windows 11では右クリックメニューが簡略化され、「送る」などの便利なメニューが非表示になっています。今回は、これを従来のWindows 10スタイルに戻す方法をご紹介します。 【ご注意】レジストリの変更は慎重に行う必要があり、誤った操作によってシステムに影響が出る可能性もございます。操作の前にはシステムのバックアップをお取りいただくことをお勧めいたします。 記事の内容は一般的な情報提供を目的としており、お客様の環境によっては動作が異なる場合もございます。操作の実行はご自身の判断と責任のもとでお願いいたします。 問題点 Windows 11の右クリックメニューには従来から以下のような変更になり、使い慣れていた身からすると少々不便なことがあります * 「送る」メニューが非表示 * よく使う機能が「その他のオプションを表示」に隠れている * Shiftキーを押しながらの右クリックが必要 解決方法 PowerShellを使って設定を変更できます 1. PowerShellスクリプトの準備 以下のコードを「restore_right_click_men

By Qualiteg プロダクト開発部
PyTorchモデルの最適化~TorchScriptの仕組みと活用法~

NumPy/PyTorch

PyTorchモデルの最適化~TorchScriptの仕組みと活用法~

こんにちは! 本日は PyTorch で開発したAIアプリケーションの本番化に欠かせない、「最適化」についての内容です。具体的には「 TorchScript」 を使用した各種学習モデルの最適化についてみていきたいとおもいます。 TorchScriptの基礎 1 TorchScriptとは TorchScriptは、PyTorchモデルを最適化された中間表現(IR)に変換する技術です。 、、といってもちょっと難しく聞こえるかもしれません。 平易な言葉で言い換えますと、 要するに、PyTorchで作った機械学習モデルを高速かつ多種多様な環境で動作させることをするための技術です。 例えば、、 ・Pythonがインストールされていない環境でも動かせるようにする ・スマホはじめ、各種組み込み機器でも使えるようにする ・動かすときの速度を段違いに上げる ・複数の処理を同時に効率よく実行する などを目論むときは TorchScript がおすすめです。 つまり、TorchScriptは「本番サービス」で使うときにすごく役立ちます。 2 Torc

By Qualiteg プロダクト開発部