IT & AIテクノロジー

ディープラーニングにおけるEMA(Exponential Moving Average)

AI数理

ディープラーニングにおけるEMA(Exponential Moving Average)

こんにちは! 本日は、画像生成、動画生成モデルなどで重要な役割を果たしている EMA ※について解説してみたいとおもいます! 当社のAIアバター動画生成サービス「MotionVox™」でも役立っています! といっても、画像生成のための専用技術というわけではなく、学習と推論(生成系も含む)というディープラーニングの運用の中で昨今かなり重宝されるテクニックとなっておりますので、基礎から実装までみていきたいとおもいます。 ※EMAの読み方は私はエマと呼んでますが、イーエムエーって言ってる人もいます。どっちでもいいでしょう。 EMA の基礎知識 EMA(Exponential Moving Average=指数移動平均)は、ざっくりいえばモデルの重みを平均化する手法です。 実は株価分析などでも使われている古くからある概念なのですが、ディープラーニングでは比較的最近になって「あ、これ結構使えるんじゃね?」と重要性が認識されるようになりました。 (”EMA”に限らず、理論の積み上げではなく「やってみたら、使えんじゃん」っていうのがかなり多いのがディープラーニング界隈のもはや常識でし

By Qualiteg 研究部
DPO(直接選好最適化)の基礎から画像・動画AIへの応用まで

AI数理

DPO(直接選好最適化)の基礎から画像・動画AIへの応用まで

こんにちは Qualiteg研究部です! 本日は、2023年、AnthropicのRafael Rafailov、Archit Sharmaらの研究チームによって提案された「直接選好最適化(Direct Preference Optimization: DPO)」について、基礎から応用までを解説します。 この手法は、論文「Direct Preference Optimization: Your Language Model is Secretly a Reward Model」で発表され、AIの学習手法に大きな影響を与えています。この論文では、言語モデル(LM)の動作を人間の好みに調整する新しい手法「Direct Preference Optimization(DPO)」を提案していますが、最近では、VLMなど言語モデルに限らず応用が広がっています。 しかも、理論は比較的シンプルなので、じわりと人気があがっていますね! DPOが生まれた背景 言語モデルは大規模データで事前学習されるため、幅広い知識と能力を持つが、その動作を制御するのは困難でした。 そのため、従来の言語モデ

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 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 プロダクト開発部
画像生成技術の進化 ~GANからディフフュージョンモデルまで~

IT & AIテクノロジー

画像生成技術の進化 ~GANからディフフュージョンモデルまで~

こんにちは!株式会社Qualiteg研究部です! 今日は画像生成技術について投稿いたします。 みなさまご存じの通り人工知能による画像生成技術は、過去10年間で急速な進化を遂げました。 今年は2024年。ちょうど2014年に「GAN」がでて10年です。 テキスト系生成AIの勢いがすごい昨今ですが、画像生成AI、超解像AIからの動画生成AIなどコンピュータビジョンかいわいも大きく進化を遂げていますね。 本記事では、主にGenerative Adversarial Networks (GAN)とディフフュージョンモデルに焦点を当て、画像生成技術の歴史的な発展を振り返ります。特に、これらの技術が画像生成と超解像の分野でどのように応用されてきたかを詳しく見ていこうとおもいます。 ブログ本編の前に! ダイジェスト動画あります! 本ブログのダイジェストを以下の動画で語っておりますので、よろしかったらこちらもご覧くださいませ! GANとディフュージョンモデル GANとは GAN(Generative Adversarial Network)は、2014年にIan Goodf

By Qualiteg 研究部
chatstream.net のクエリパラメータ仕様

ChatStream Guide

chatstream.net のクエリパラメータ仕様

chatstream.net は(株)Qualiteg が運用するサービスで、世界中で公開されている最新のLLMをいちはやく体験することができます。 特定の LLM を開いてじっくりチャットをしたり、複数のLLM を開いて協調的につかってみたり、LLM同士で出力を比較させたり、LLMのもつポテンシャルを感じていただけるようになっています。 たとえば、PCブラウザでURLを開くと、4つのLLMを同時に開いて、同時にチャットを行うことができます。このようにお好みに応じてチャットを制御することができるのがURLパラメータです。 https://chatstream.net/?ws_name=chat_app&mult=1&ontp=1&isync=1&model_id=llama_3_elyza_jp_8b&model_id=openai_gpt_3_5_

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 プロダクト開発部
PyTorchバージョンとNVIDIA GPU Compute Capability Level サポート

PyTorch

PyTorchバージョンとNVIDIA GPU Compute Capability Level サポート

古いPyTorchコード資産を持っている会社は、昔のコードが最新のPyTorchで動かない!最新のGPUで動かない!ということに遭遇することが多いのでしょうか。 今回は、PyTorchバージョン、対応GPU Capability Level 、対応CUDAバージョンについてまとめてみます。 PyTorchがサポートするGPUの Compute Capability PyTorch バージョン サポートされる Compute Capability (SM) レベル 1.0.0 - 1.3.1 SM_35, SM_37, SM_50, SM_60, SM_61, SM_70 1.4.0 - 1.7.1 SM_37, SM_50,

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 プロダクト開発部