DaVinci Resolve「GPU memory full」をMacで直す
MacのDaVinci Resolveで「GPU memory full」が出る原因、最初に見直すべき点(タイムライン解像度、ノイズリダクション、ノード、メディア)、再発を防ぐ方法を解説します。
MacでDaVinci Resolveが「GPU memory full」(GPUメモリがいっぱい)と表示する場合、現在のフレームの画像処理に必要なグラフィックスメモリが、Resolveが確保できる量を超えていることを意味します。手早い対処を順に挙げると、作業中はタイムライン解像度を下げる、テンポラルノイズリダクションを控えめにする、重いノードを減らすかキャッシュする、最適化メディアやプロキシで再生する、の4つです。DaVinci ResolveのGPUメモリがフルになるケースの多くは、最初の2つで解決します。以下では、原因、エラーを引き起こすクリップの見つけ方、再発を防ぐ方法を説明します。
メッセージ自体も、たいていタイムライン解像度を下げるか、補正を減らすよう提案しています。これは文字どおりに受け取ってください。この2つが最も効くレバーです。
MacでResolveのGPUメモリが足りなくなる理由
Resolveは画像処理のほぼすべてをGPUで行います。再生するフレームは1枚ずつデコードされ、タイムライン解像度にスケーリングされ、クリップに適用されたノード、エフェクト、Fusionツールを順に通ります。各ステップがフレームのコピーをメモリに保持することがあり、エフェクトによっては複数のフレームを同時に抱えます。
使える余裕はMacによって異なります。
- Apple silicon。 CPUとGPUが1つのユニファイドメモリを共有します。独自の固定容量を持つ別のグラフィックスカードはありませんが、macOSはGPUがそのメモリのうちどれだけを使えるかを制限しており、Macで開いている他のものもすべて同じメモリから使います。16GBのMacでResolve、ブラウザ、メッセージアプリを開いていると、箱に書かれた数字から想像するよりも余裕はかなり少なくなります。
- ディスクリートGPUを搭載したIntel Mac。 グラフィックスカードは独自の固定ビデオメモリを持っており、ノートブックでは控えめなことが多いです。それが埋まると、フレームの行き場がなくなります。
つまり、このエラーがバグであることはまれです。これは計算の問題です。フレームサイズに、フレーム全体のコピーを必要とする処理の数を掛けたものが、その時点で空いているメモリを上回るということです。
エラーを引き起こすクリップを見つける
設定を変える前に、エラーがどこで出るかを確認しましょう。ほとんどの場合、タイムライン全体ではなく特定のクリップで発生します。
- タイムラインを通して再生し、警告や赤い再生インジケーターが出るクリップに印を付けます。
- それぞれのクリップでカラーページを開き、ノードツリーを確認します。ノードの数を数え、重いツールがないか確認します。テンポラルまたは空間ノイズリダクション、マジックマスク(Magic Mask)、フェイスリファインメント(Face Refinement)、レンズブラー系のエフェクト、クリップ属性(Clip Attributes)のスーパースケール(Super Scale)、Fusionコンポジションなどです。
- 再生が回復するまで、ノードを1つずつ無効にします(ノードを選んでオフに切り替える)。再び有効にしたときにエラーが戻るノードが、最も疑わしい原因です。
こうすれば、3つのショットを直すためにプロジェクト全体の品質を下げずに済みます。
まず変えるべきこと
1. 作業中はタイムライン解像度を下げる
たいていはこれが最も効果的です。プロジェクト設定(Project Settings)からマスター設定(Master Settings)を開き、タイムライン解像度を低く設定します。たとえばUHDや6Kではなく1920x1080にします。すべてのノードとエフェクトが小さいフレームを処理するようになり、メモリ使用量が大きく減ります。タイムラインがプロジェクトのデフォルトではなく独自の設定を使っている場合は、そのタイムラインのタイムライン設定(Timeline Settings)で解像度を変更してください。
Resolveは解像度に依存しない設計なので、サイズ調整、ウィンドウ、トラッキングは変更に合わせてスケールします。注意点は2つあります。ブラーの半径やシャープニングなど、ピクセル単位で指定するエフェクトは、別の解像度では見え方がわずかに変わることがあります。また、グレーディング済みのプロジェクトでタイムライン解像度を変えるなら、プロジェクトかタイムラインを複製してから行うのが安全です。最終レンダリングの前には、解像度を納品サイズに戻し、重いショットを確認してください。
プロジェクトに手を加えたくない場合は、再生(Playback)メニューでタイムラインプロキシ解像度をハーフまたはクォーターに設定します。これは再生時の処理解像度だけを下げるもので、レンダリングには影響しません。
2. ノイズリダクションを控えめにする
テンポラルノイズリダクションは、このエラーの最もよくある原因の1つです。現在のフレームを前後のフレームと比較するため、解析させるフレームを1枚増やすごとに、フル解像度のフレームが1枚GPUメモリに追加されます。
- テンポラル設定のフレーム数を減らします。ノイズが軽い素材なら、フレーム数を減らしてもほとんど変わらないことがよくあります。
- 作業中は動き推定(Motion Estimation)を速いモードにします。
- テンポラルと空間ノイズリダクションの両方を使っているなら、そのショットに本当に両方が必要か確認します。
- ノイズリダクションはツリーの前のほうで専用ノードに置き、そのノードをキャッシュします(ノードを右クリックしてノードキャッシュをオンにし、再生メニューのレンダーキャッシュをスマートまたはユーザーに設定)。こうするとResolveは毎回再計算せず、一度だけレンダリングします。
テンポラルと空間ノイズリダクションはDaVinci Resolve Studioの機能です。無償版を使っていてもエラーが出るなら、以下の別の原因を確認してください。
3. ノードの数を見直す
シンプルな補正を長く直列につないでも、負荷はそれほどかかりません。重いツールを1つのクリップにいくつも重ねると、負荷は大きくなります。よくある原因は、マジックマスク、フェイスリファインメント、スーパースケール、ソフトネスを大きくしたトラッキングウィンドウの多用、サードパーティのOpenFXプラグインです。
- 同じ役割のシンプルな補正は1つのノードにまとめます。
- 重いエフェクトを含むノードはキャッシュするか、クリップのコンテキストメニューにある「Render in Place」で焼き込みます。Resolveは元のクリップへのリンクを保持するので、後でグレードを変える必要があれば元のクリップに戻れます。
- タイムラインレベルのノードと調整クリップ(Adjustment Clip)を確認します。タイムライン全体にかけたグレードは、その下のすべてのクリップで実行されるため、負荷が何倍にもなります。
- 再生メニューでレンダーキャッシュをスマートまたはユーザーに設定し、Resolveが再生のたびに再計算するのではなく、完成した結果をディスクに保存するようにします。
4. 最適化メディアやプロキシを使う
最適化メディアとプロキシが最も役立つのは、ソースが高解像度で重いlong-GOPやRAWフォーマットの場合です。メディアプールでクリップを右クリックして最適化メディアまたはプロキシメディアを生成し、再生メニューで利用可能なときに使う設定になっていることを確認します。マスター設定では、最適化メディアの解像度とフォーマット(ProResやDNxHRの種類など)を選べます。
これで何が解決するかは現実的に考えましょう。最適化メディアはデコードの負荷を下げるので、再生には効きます。しかし、重いノイズリダクションノードやFusionコンポジションが、フルのタイムライン解像度でGPUに要求するメモリは減りません。だからこそ、タイムライン解像度とノードの選び方が先なのです。
Macで確認したい設定
いくつかの環境設定と習慣が、Resolveが実際に使えるメモリ量に影響します。
- GPU処理モード。 環境設定(Preferences)のシステム(System)にあるメモリーとGPU(Memory and GPU)で確認できるとおり、MacのResolveはMetalを使います。特別な理由がない限り、GPUの選択は自動のままにしておきます。
- 他の重いアプリを閉じる。 タブをたくさん開いたブラウザ、他の動画アプリ、3Dツールは、Apple silicon上で同じユニファイドメモリを取り合います。
- 開いているタイムラインとFusionコンポジションを減らす。 開いているFusionコンポジションや余分なタイムラインが、メモリを占有していることがあります。使っていないものは閉じましょう。
- 外部ディスプレイ。 高解像度の外部ディスプレイもGPUメモリを使います。メモリの少ないMacでは、5Kや6Kの画面に大きなビューアを表示すると負荷が増えます。
- アップデートは慎重に。 ResolveやmacOSのアップデートで、GPUの挙動が変わることはよくあります。DaVinci Resolveのサポートページでリリースノートを読み、プロジェクトの途中ではなくプロジェクトの合間にアップデートし、事前にプロジェクトライブラリをバックアップしてください。
Resolveを再起動すると、長時間の作業でたまったメモリが解放されます。エラーが一日の終わりにだけ出て、再起動すると消えるなら、1つの重いクリップよりも、たまったキャッシュや開いたままのタイムラインが原因である可能性が高いです。
再発を防ぐには
このエラーは、同じような種類のプロジェクトで繰り返し起きがちです。いくつかの習慣で大半を防げます。
- 作業解像度を最初に決める。 Macが苦しいなら、4K以上のプロジェクトでもHDで編集とグレーディングを行い、確認とレンダリングのときに納品解像度に切り替えます。
- ノイズ除去は一度だけ、早めに。 ノイズリダクションはカメラごと、またはシーンごとに決め、キャッシュしたノードに適用し、毎回調整し直さないようにします。
- 意図を持ってノードツリーを組む。 ツリーの構成を一定にして、重いツールがどこにあるかわかるようにし、それらのノードをキャッシュすることを習慣にします。
- 重いフォーマットは取り込み時に最適化メディアを生成する。 編集を始める前に済ませておきます。
- 自分のMacの上限を知る。 メモリの少ないMacでは、同時に使う重いエフェクトを減らす前提で計画します。Apple siliconでは後からメモリを増設できないので、グレーディング用に新しいMacを買うなら、ユニファイドメモリを優先する価値があります。
軽いグレードの控えめなタイムラインでもエラーが続く場合は、詳細(ResolveとmacOSのバージョン、Macの機種、メモリ容量、コーデック、エラーが出るノードツリー)をBlackmagicのフォーラムかサポートに送ってください。
FAQ
タイムライン解像度を下げると、最終レンダリングの画質は落ちますか?
レンダリング前に元に戻せば落ちません。Resolveは解像度に依存しないので、グレード、サイズ調整、ウィンドウは変更に合わせてスケールします。ただし、ブラーやシャープニングなどピクセル単位のエフェクトは見え方がわずかに変わることがあるため、戻したあとで該当ショットを確認してください。
Apple siliconではメモリを増やせばGPU memory fullは直りますか?
ユニファイドメモリが多いほどGPUの余裕が増えるので、メモリの多いMacほど上限に達するのは遅くなります。ただし、高解像度で重いエフェクトを使う負荷そのものはなくならないため、大きなマシンでも同じ習慣が役立ちます。
無償版のResolveのほうがこのエラーは出やすいですか?
そういうわけではありません。無償版にはテンポラルノイズリダクションなど最も重いツールの一部がないため、同じ素材ならエラーが出る頻度はむしろ少ないかもしれません。原因と対処法はどちらも同じです。
ツールそのものが問題なら
ResolveのGPUメモリエラーのほとんどは上の手順で解決でき、ResolveがMacで使える最も優れたグレーディングツールの1つであることに変わりはありません。もっと大きな問題が、自分の作業にとってResolveが重い、あるいは覚えにくいと感じることなら、DaVinci Resolveは難しすぎる?その理由と対策でその理由を、Mac向けDaVinci Resolveの代替ソフトでcinemaOSを含む現実的な選択肢とその限界を率直に比較しています。