日々の開発Tips

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 プロダクト開発部
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 プロダクト開発部
「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 プロダクト開発部
【極めればこのテンソル操作 】インプレース操作でメモリ効率化!

NumPy/PyTorch

【極めればこのテンソル操作 】インプレース操作でメモリ効率化!

こんにちは!今日は PyTorchのインプレース操作に関する内容です! ディープラーニングの学習モデルを作ってると、メモリ管理が大きな課題になります。課題の大部分はGPUメモリとお考えの方も多いのではないでしょうか。 そんなときに助けてくれるのが、PyTorchのインプレース操作です! この記事では、インプレース操作の使い方をいろんな角度から見ていきたいとおもいます。 インプレース操作って何? 基本的な考え方 インプレース操作とは、既存のメモリ領域を直接書き換える操作のことです。PyTorchでは、演算子の後ろにアンダースコア(_)をつけることでインプレース操作を実行できます。 つまり、普通の操作だと新しいメモリを確保する必要がありますが、インプレース操作なら既存のメモリを直接書き換えることが可能です。 それでは、実際に見てみましょう! import torch # 普通の操作 x = torch.tensor([1, 2, 3]) y = x + 5 # 新しいメモリが必要 # インプレース操作ならこう! x = torch.tensor([1, 2, 3

By Qualiteg プロダクト開発部
ディープラーニングモデルの安全な並列推論とパフォーマンス最適化

NumPy/PyTorch

ディープラーニングモデルの安全な並列推論とパフォーマンス最適化

こんにちは! 今日は、よく聞かれる質問の1つである「単一のモデルインスタンスで安全に並列推論を行えるか?」に関する内容です! evalモードでの並列推論の安全性 PyTorchモデルがmodel.eval()を使用してevalモードに設定されている場合、一般的に並列推論に対して安全になります。 (ここでいう「並列」はマルチスレッドによる処理ととらえてください。バッチ推論については後述します。) その理由は、 1. パラメータの不変性 evalモードでは、順伝播(forward pass)中にモデルのパラメータが更新されません。 2. 学習特有レイヤーの非活性化 BatchNormなどのレイヤーは、バッチ統計の計算ではなく、実行時統計(running statistics)を使用するモードに切り替わります。 3. 入力データの独立性 各スレッドやプロセスは独自の入力データで動作し、それぞれ別のメモリ領域に存在します。 以下は、evalモードでの安全な並列推論の基本的な例です: import torch import th

By Qualiteg プロダクト開発部