Edited at

coreMLはbackgroundで使えない

More than 1 year has passed since last update.


シンプルな事実

coreMLの推論はアプリをバックグラウンドに移した瞬間

Insufficient Permission (to submit GPU work from background)

というエラーを吐いて死ぬ。。。

そして解決策は無い(無慈悲

参考: https://stackoverflow.com/questions/43680239/how-to-solve-insufficient-permission-to-submit-gpu-work-from-background-ioaf

※ エラーの内容的にCPUonlyのオプションを加えれば可能かもしれませんがそれってもうcoreMLの意味あんまないよね


愚痴

みんながチュートリアルでやっているような、カメラの画像から写っているものを推論したり、選択した画像を変換したりとかとりわけ「画像」に対しては確かにforegroundでしか使えなくてもあまり問題にならないと思うんですが、ちょっと「音楽」に対して自分で作ったモデルを使おうと思ったので、この問題は全てを諦めるしかなくなるぐらいのインパクトが有りました…

たとえば、音楽の雰囲気やビート、サビなどの判定をしてちょっとエフェクトかけたりとかね。面白そうだと思ったんですよ。

でも誰も音楽をアプリforegroundにしたまま聞かないでしょうよ :cry: そりゃバッテリーの問題とかもあるとは思いますがなんとかならんもんですかね。。


追記

useCPUOnlyオプションを加えてみたらたしかにbackgroundでも動きました。

めでたしめでたし。

ではなくて、一定時間立つと

Terminated due to signal 9

で落ちました。Deviceのログを見ると

Event:           cpu usage

CPU: 48s cpu time over 50 seconds (96% cpu average), exceeding limit of 80% cpu over 60 seconds

とっても分かりやすいエラーが書かれていました。そりゃGPUなら数秒で終わる処理もCPUだとそんだけ時間かかるのは自然でしょうし、CPUで瞬間で終わる処理ならcoreMLとか言って大層なもの使わなくて良いわけですし。

詰んだのでは :thinking: