推論時torch.tensor(sourceTensor)ではなくて、sourceTensor.clone().detach()を使おう

推論時torch.tensor(sourceTensor)ではなくて、sourceTensor.clone().detach()を使おう
Photo by Ashkan Forouzani / Unsplash

PyTorchのテンソル操作最適化: 警告メッセージの理解と解決

こんにちは!

Qualiteg プロダクト開発部です。

PyTorch 1.13にて、次のような警告メッセージに遭遇しました

UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).

この記事では、この警告の意味を解説し、修正方針についてかきたいとおもいます。

torch.tensor() よりも .clone().detach() のほうがおすすめなのか

それは、PyTorchがテンソルと自動微分(オートグラッド)をどのように扱うかに関係があります。

torch.tensor() をつかうと「勾配計算=自動微分どうするねん」っていう意思表示がハッキリしないんです。

一方clone().detach()は「勾配配計算しないよ」をあらわし、clone().detach().requires_grad_(True)は「勾配計算有効」をあらわすので、コードから意図がよみとれる&明示的に指定できる、のがポイントです。

clone().detach()では、元のテンソルとメモリを共有せず、計算グラフから切り離された新しいテンソルが作成されます。これにより、特に勾配や誤差逆伝播を扱う際に、予期せぬ動作を防ぐことができるというわけです。

推論で使うときはどう書けばいい?

結論からいうと、推論時には sourceTensor.clone().detach() をつかいましょう。

その理由は以下のとおりです

  1. 計算効率:
    推論時には通常、勾配計算は不要です。detach() を使うことで、テンソルを計算グラフから切り離し、不要な勾配計算を防ぎます。これにより、メモリ使用量が減少し、計算速度が向上します。
  2. メモリ管理
    clone() は新しいメモリ領域にデータをコピーします。これにより、元のテンソルに影響を与えることなく、安全に操作を行えます。
  3. 意図しない変更の防止
    detach() を使用することで、誤って勾配計算を行ってしまうリスクを減らせます。これは特に大規模なモデルや複雑なアーキテクチャで重要です。
  4. モデルの固定
    推論時には当然モデルのパラメータを更新したくないのでdetach() を使うことで、誤ってモデルが更新されることを防げます。

チェインしてるメソッドの詳細説明

  1. clone() メソッド:
    • 新しいテンソルを作成し、元のテンソルのデータをコピーします。
    • これにより、元のデータに影響を与えることなく安全に操作できます。
  2. detach() メソッド:
    • テンソルを現在の計算グラフから切り離します。
    • 勾配計算が不要な場合(例:推論時)に特に有用です。

まとめ

  • sourceTensor.tensor() でコピーするのはコンテクストがあいまいなので使わないようにしましょう。
  • 推論時は clone().detach() を使用します。勾配計算が不要なため、メモリ使用量を減らし、計算速度を向上させます。
  • 学習時は 勾配計算が必要な場合は、clone().detach().requires_grad_(True) を使用します。これにより、新しいテンソルで勾配計算が可能になります。

Read more

エンジニアリングは「趣味」になってしまうのか

エンジニアリングは「趣味」になってしまうのか

こんにちは! 本日は vibe coding(バイブコーディング、つまりAIが自動的にソフトウェアを作ってくれる)と私たちエンジニアの将来について論じてみたいとおもいます。 ちなみに、自分で作るべきか、vibe codingでAIまかせにすべきか、といった二元論的な結論は出せていません。 悩みながらいったりきたり考えてる思考過程をツラツラと書かせていただきました。 「作る喜び」の変質 まずvibe codingという言葉についてです。 2025年2月、Andrej Karpathy氏(OpenAI創設メンバー)が「vibe coding」という言葉を広めました。 彼は自身のX(旧Twitter)投稿で、 「完全にバイブに身を任せ、コードの存在すら忘れる」 と表現しています。 つまり、LLMを相棒に自然言語でコードを生成させる、そんな新しい開発スタイルを指します。 確かにその生産性は圧倒的です。Y Combinatorの2025年冬バッチでは、同社の発表によれば参加スタートアップの約25%がコードの95%をAIで生成していたとされています(TechCrunch, 2

By Qualiteg プロダクト開発部
発話音声からリアルなリップシンクを生成する技術 第5回(後編):Transformerの実装と実践的な技術選択

発話音声からリアルなリップシンクを生成する技術 第5回(後編):Transformerの実装と実践的な技術選択

なぜGPTで成功したTransformerが、リップシンクでは簡単に使えないのか?データ量・計算量・過学習という3つの課題を深掘りし、LSTMとTransformerの実践的な使い分け方を解説。さらに転移学習という第三の選択肢まで、CEATEC 2025で見せた「アバター」の舞台裏を、クオ先生とマナブ君の対話でわかりやすく紐解きます。

By Qualiteg プロダクト開発部
(株)Qualiteg、CEATEC 2025 出展レポート

(株)Qualiteg、CEATEC 2025 出展レポート

こんにちは! 2025年10月14日から17日までの4日間、幕張メッセで開催されたアジア最大級の総合展示会「CEATEC 2025」(主催者発表、総来場者数98,884名)に、株式会社Qualitegとして出展してまいりました! プレスリリース 株式会社Qualiteg、CEATEC 2025に出展 ― AIアバター動画生成サービス「MotionVox®」最新版を実体験株式会社Qualitegのプレスリリース(2025年10月10日 08時50分)株式会社Qualiteg、CEATEC 2025に出展 ― AIアバター動画生成サービス「MotionVox®」最新版を実体験PR TIMES株式会社Qualiteg CEATEC 2025 出展概要 当社は幕張メッセのホール6にあるネクストジェネレーションパークというエリアの 6H207 にブースを構えました。 「Innovation for All」というCEATECのテーマにあわせ、今回は、 AIアバター動画生成サービスMotionVoxを中心に当社の革新的なAIソリューションを展示させていただきました。 展示内容紹介に

By Qualiteg ビジネス開発本部 | マーケティング部, Qualiteg ニュース
日本語対応 LLMランキング2025 ~ベンチマーク分析レポート~

日本語対応 LLMランキング2025 ~ベンチマーク分析レポート~

はじめに 本レポートは、Nejumi Leaderboard 4のベンチマークデータ(2025/10/11版)に基づいて、日本語対応LLMの性能を総合的に分析したものです。 Nejumi Leaderboard 4は、日本語タスクにおけるLLMの性能を多角的に評価する信頼性の高いベンチマークとして知られています。 本分析では、総合スコアとコーディングスコアの2つの観点から、商用APIモデルとオープンモデルの両方を対象に、それぞれの特徴や傾向を詳しく見ていきます。 オープンソースモデルについて Weightがオープンなモデルは場合によっては「オープンソースモデル」、「OSSモデル」と呼ばれますが、モデルによっては「オープンソース」と呼ぶには不十分な場合があるため本稿では、「オープンソースモデル」ではなく「オープンモデル」と表現しています。 ベンチマーク分析について 本レポートは、LLM選択の参考情報として、ベンチマークデータから読み取れる傾向や特徴を提示するものです。最終的なモデル選択においては、これらの情報を踏まえつつ、実際の使用環境での検証を行うことをおすすめいたし

By Qualiteg コンサルティング, Qualiteg プロダクト開発部