NumPy/PyTorch

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