終了

連続スクリプト処理中にGPUメモリ不足のアラート

参加者 ,
Apr 30, 2025 Apr 30, 2025

M1 / OS 13.7.5 / AI 2024 /ExtendScript

JXAのドロップレットでAIで処理する書類を一旦テキストに書き出し、

JXAよりExtendScriptを実行して、

ExtendScript側でテキストファイルを読み込み書類をひとつずつ処理するスクリプトを実行中に

途中から添付画像の様なアラートが表示されました。

(書類は1つずつ保存して閉じています)

(試しにJXAと切り離してExtendScriptだけで実行しても同じでした)

 

このアラートを回避する方法はあるのでしょうか?

処理数は300程度でそこまで多くはありません。

以前はこのぐらいの処理をしてもアラートが出なかった気がするのですが。

キーワード
Mac , スクリプティング
226
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines

correct answers 1 件の正解

Community Expert , May 01, 2025 May 01, 2025

CADからでパスが多いという事はメモリの利用量の問題ですね。AppleSilicon機はGPUメモリをメインから割譲しますから、メインメモリの利用状況によってはGPUへの割当が不足する可能性があります。ドキュメントループでメモリスタックを開放しきれないのであれば、小刻みに実行する他ないでしょう。

翻訳
Community Expert ,
Apr 30, 2025 Apr 30, 2025

スクリプト構成を精査しないことにははっきりしたことは言い難いので、まずそこをお含みおきください。

ドキュメント構成による影響が考えられるんですけど、スクリプトの実行ではメインメモリにリークは生じますが、GPUメモリを消費することはあまりありませんので、単純に描画スタックのリフレッシュが行われていないのではないかと思います。さっと思いつくのはredrawで描画をリフレッシュするのと、ドキュメント毎にガーベージコレクションを走らせる等でしょうか。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Apr 30, 2025 Apr 30, 2025

ありがとうございます。redrawは入れてみてもだめでした。

以下スクリプトです。

 

#include "~/json2.js"
var myp = $.fileName.split("/");
var currentFolder = myp.slice(0, myp.length - 1).join("/") + "/";
var regList =["^test"];

(function () {
var files=readText(File(currentFolder+"docs.txt"));
files=JSON.parse(files);

for (var i=0; i<files.length; i++){
var fp =files[i];
app.open(File(fp));
var doc = app.activeDocument;
revertToBlack(regList);
}
})();

function revertToBlack(regs){
var doc = app.activeDocument;
var cSwatches=(function(){
var sws = doc.swatches;
var ary = [];
for (var i=0; i<sws.length; i++){
var sw = sws[i];
var nm = sw.name;
for (var r=0; r<regs.length; r++){
var reg=RegExp(regs[r]);
if (nm.match(reg)){
ary.push(sw);
}
}
}
return ary;
})();

if (cSwatches.length>0){
setCol(cSwatches);
removeSwatch(cSwatches);
}
function removeSwatch(ary) {
for (var s=0; s<ary.length; s++){
var csw = ary[s].remove();
}
}

function setCol(ary) {
var theCol = new CMYKColor();
theCol.cyan = 0;
theCol.magenta = 0;
theCol.yellow = 0;
theCol.black = 100;

for (var i = 0; i < ary.length; i++) {
var swatch = ary[i];

if (swatch) {
if (swatch.color.typename === "SpotColor") {
swatch.color.spot.color = theCol;
} else {
swatch.color = theCol;
}
if ((swatch.color.constructor.name == 'SpotColor') && (swatch.color.spot.colorType == ColorModel.PROCESS)) {
actualColor = swatch.color.spot.color;
swatch.color = actualColor;
}
} else {
// alert("スウォッチ '" + swatchName + "' が見つかりません。");
}
}
}
app.redraw();
doc.close(SaveOptions.SAVECHANGES);
}

function readText(f){
if (f != null) {
var res= f.open('r');
if (res) {
var txt= f.read();
f.close();
}
}
return txt;
}

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
May 01, 2025 May 01, 2025

redrawの代わりに$.gc()を入れてもだめでした。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
May 01, 2025 May 01, 2025

投稿されたコードに問題点はないですね。やはりドキュメントの描画が重い影響ではないかと思います。

ちなみにPCの実装メモリはどれぐらい載ってますか?

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
May 01, 2025 May 01, 2025

16GBです。

CADから作成した図面を複数含むのでドキュメントによっては少しPathItemsは多いですが、

それほど複雑な図でもなく、各ドキュメントの描画もそれほど重くはありません。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
May 01, 2025 May 01, 2025

CADからでパスが多いという事はメモリの利用量の問題ですね。AppleSilicon機はGPUメモリをメインから割譲しますから、メインメモリの利用状況によってはGPUへの割当が不足する可能性があります。ドキュメントループでメモリスタックを開放しきれないのであれば、小刻みに実行する他ないでしょう。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
May 01, 2025 May 01, 2025
最新

結論としてドキュメントを閉じた後に$.gc()か、

一通りの処理を終えた後とドキュメント保存前の2箇所に$.gc()かredrawで最後までできました。

 

ただいずれの場合も処理数後半からドキュメントを閉じた後にイラレのドキュメント表示スペース(黒)が

マゼンダ1色みたいな状態になるのは同じでした。

かろうじて処理できているという印象です。

ともかく今回はこれで凌ぎました。ありがとうございました。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines