💭

M1 Macで機械学習やるぜ(CoreML YOLOv3編)

2021/01/21に公開

振り返り

前回は、CoreMLとPyTorchのYOLOv3の比較を行った。
結果としては、GPU(RTX3070)上で動作するPyTorchの方が3倍速かった。
そりゃ金額が違うからあたりまえ。
むしろコストの割に、M1 Macが健闘していると思う。

ソースコード

CoreMLの処理が動画再生と同期しているのではないかと気になって、
コンソールアプリにしてみた。
Githubにソースコードを置いたので、cloneして試してほしい。

手順

  1. git clone https://github.com/forest1040/MovAna.git
  2. CoreMLのモデルダウンロード
    Appleのサイトから、YOLOv3というモデルをダウンロードする。
    ダウンロードしたファイルをModelsの下に置く。
  3. コードの以下を適当に修正する。(urlに適当な動画ファイルを指定する。)
import Foundation

print("start")

//let url = Bundle.main.url(forResource: "test", withExtension:"mp4")
let url = URL(fileURLWithPath: "/Users/tmori/temp/metal/sample-movie/1min/test.mp4")
let m = MovAna()

let startTime = CFAbsoluteTimeGetCurrent()
m.processMovie(url: url)
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print(timeElapsed)

print("end")
  1. XCodeで実行する。

結果

俺のM1 Macでは、52.702553033828735秒で実行できた。
(リリースビルド版 デバッグビルドだと1秒ぐらいの差がでる。)
モデル読み込み後から計測しているので、純粋に60秒の動画ファイルの推論時間だ。
60秒を切っているので、動画再生とは同期していない。
つまり、GPU(RTX3070)PyTorchとの性能差は、3倍ということだ。

Discussion