日々の開発Tips

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 プロダクト開発部
【極めればこのテンソル操作 】NumPy配列の縦マージ方法:5つのアプローチ

NumPy/PyTorch

【極めればこのテンソル操作 】NumPy配列の縦マージ方法:5つのアプローチ

こんにちは! 今日は、NumPyにおける配列の縦マージについてご説明いたします! ご存じの通りNumPyは、Pythonで科学的計算を行うための強力なライブラリです。 複数のNumPy配列を縦にマージして大きな配列を作成する方法について、5つの異なるアプローチを詳しく見ていきましょう。 具体的には、(N,128)と(M,128)の形状を持つ複数のNumPy配列が格納されたPythonのリストから、(N+M,128)の形状を持つ単一のNumPy配列を作成する方法を説明します。 1. np.vstack() を使用する方法 np.vstack() 関数は、垂直方向(行方向)に配列をスタックするための関数です。 import numpy as np list_of_arrays = [ np.random.rand(3, 128), np.random.rand(2, 128) ] merged_array = np.vstack(list_

By Qualiteg プロダクト開発部
GPUメモリ最適化の深層:初回と最終バッチの特殊性を踏まえた効率的なAI画像処理

NumPy/PyTorch

GPUメモリ最適化の深層:初回と最終バッチの特殊性を踏まえた効率的なAI画像処理

はじめに こんにちは!Qualitegプロダクト開発部です。 当社では、LLMテクノロジーをベースとしたAIキャラクター、AIヒューマンの研究開発を行っています。そんな中、表情、仕草のように「人間らしさ」をもったバーチャルヒューマンを再現するときには画像生成、画像編集といったAIを活用した画像処理が必要となります。 人と対話するAIヒューマンやバーチャルヒューマンはタイムリーに表情や仕草を生成する必要があるため、複数の画像をフレーム連結してつくるモーション(シンプルにいうと動画)を短時間に生成する必要があります。 このようなとき、AIトレーニングやシンプルな推論とは異なり、いかにGPUの能力を引き出してやるか「GPUの使いこなし術」がミソとなります。 GPUの使いこなし術というと、以前のブログにも連続バッチやダイナミックバッチについてLLM推論のコンテクストで語りましたが、本日は画像処理におけるGPUメモリ最適化、とくに、推論時バッチにおける「初回と最終回」のお作法という少しマニアックな話題について語ってみようとおもいます。 画像処理とGPU GPUを用いた画像

By Qualiteg プロダクト開発部
【極めればこのテンソル操作 】tensor.unsqueeze(0)と array[None] の違い

NumPy/PyTorch

【極めればこのテンソル操作 】tensor.unsqueeze(0)と array[None] の違い

今日は、 unsqueeze(0) の解説しつつ、私たちがよく直面する「あるある」な問題についてもちょこっと話してみたいと思います。 「value.unsqueeze(0)」と「value[None]」 の見分けついていますか? はい、前者は主に PyTorch、後者は NumPyでの操作の違いです。 でもどちらも、ぱっとみは、先頭に新しく次元を追加する操作なので、コードをちらっとみただけではわからないことがありますよね。 なぜかというと、ディープラーニング系のプログラミングでは PyTorchのテンソルと、NumPyの配列操作がかなり入り混じるからです。 そう、今日の話題はPyTorchとNumPyのコードが入り乱れて、どっちの配列(テンソル)を扱っているのわけワカメになる問題です。 ちなみに、話題のテーマをブラさないように PyTorchでは 先頭に新しい次元を追加するときに unsqueeze(0) だけでなく [None] も使えてしまいますが、いったん[None]は NumPy で主に使用する操作という前提で説明させてくださいませ。^^; これに対する当

By Qualiteg プロダクト開発部
【極めればこのテンソル操作 】reshape(N,-1)

NumPy/PyTorch

【極めればこのテンソル操作 】reshape(N,-1)

NumPy reshape: データ形状を自在に操る方法 NumPyのreshape関数は、多次元配列の形状を変更する強力なツールです。この記事では、reshapeの基本的な使い方から応用まで、具体例を交えて詳しく解説します。 1. reshape の基本 reshapeは、配列の要素数を変えずに形状を変更します。 import numpy as np # 1次元配列を作成 arr = np.array([1, 2, 3, 4, 5, 6]) print("Original array:", arr) print("Shape:", arr.shape) # 2x3の2次元配列に変形 reshaped = arr.reshape(2, 3) print("\nReshaped to 2x3:

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 プロダクト開発部
【極めればこのテンソル操作】permute(1,0)

NumPy/PyTorch

【極めればこのテンソル操作】permute(1,0)

本記事はPyTorch,NumPy でよくつかうテンソル操作を、頭でしっかりイメージできるようにするための機械学習エンジニア初心者向けシリーズです! 「厳密な正しさ」をもとめるリファレンス的なものではなく、現場でつかうソースコードに頻出するコードで覚えていきましょう。 今日は permute (1,0) permute操作は、テンソルの次元の順序を変更するためによく使用されます。permuteメソッドの引数は、並び替えの順番を指定します。 permute(1,0)は2次元のテンソルにおいては、「転置」テンソルを作る役割を果たします。なぜそうなのか、順を追ってみていきましょう! それでは早速以下のような 2×3 なテンソルを考えてみましょう このテンソルは2次元なので、表で表現できますね。 このとき、このテンソルは PyTorchでは以下のように定義できます。 import torch x = torch.tensor([[1, 2, 3], [4, 5, 6]]) このテンソルの「形状」は、上でもかいたとおり 2 × 3 です

By Qualiteg プロダクト開発部
ONNX RuntimeのCUDAエラー「libcublasLt.so.11: cannot open shared object file」を解決する

日々の開発Tips

ONNX RuntimeのCUDAエラー「libcublasLt.so.11: cannot open shared object file」を解決する

こんにちは! ONNX Runtimeを使用していると、以下のようなエラーに遭遇することがあります [E:onnxruntime:Default, provider_bridge_ort.cc:1744 TryGetProviderInfo_CUDA] Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or directory [W:onnxruntime:Default, onnxruntime_pybind_state.cc:870 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider.

By Qualiteg プロダクト開発部
RuntimeError: implement_array_function method already has a docstring というエラーが発生したとき

日々の開発Tips

RuntimeError: implement_array_function method already has a docstring というエラーが発生したとき

以下のようなエラーが発生したとき、 RuntimeError: implement_array_function method already has a docstring このエラーメッセージは、numpyパッケージ内で発生している問題のようです。 特に、implement_array_functionメソッドに既にドキュメンテーションが存在しているというエラーで、これは通常、互換性のないバージョンのnumpyを使用している場合に発生するようです。 次の対策でエラーは発生しなくなりました pip install numpy==1.19.5

By Qualiteg プロダクト開発部
AttributeError: module 'torch._dynamo' has no attribute 'mark_static_address' が発生したときの対処法

日々の開発Tips

AttributeError: module 'torch._dynamo' has no attribute 'mark_static_address' が発生したときの対処法

以下のようなエラーが出た場合の対処法 File "/venv/Lib/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/venv/Lib/site-packages/transformers/generation/utils.py", line 1744, in generate model_kwargs["past_key_values"] = self._get_cache( ^^^^^^^^^^^^^^^^ File "/venv/Lib/site-packages/transformers/

By Qualiteg プロダクト開発部