Swift Digest
Blog | Swift.org Blog

MLX と Swift によるオンデバイス機械学習リサーチ

On-device ML research with MLX and Swift

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

何が発表されたのか

Swift は、Python のような言語の使いやすさと高水準な構文を、C++ のようなコンパイル言語の速度と兼ね備えており、機械学習のリサーチに使う言語として大きな可能性があります。

MLX は、Apple silicon 上での機械学習リサーチのための配列フレームワークです。MLX Swift は、その MLX を Swift から扱えるように拡張するもので、機械学習の研究者が Apple silicon 上で手軽に実験できるようにします。

今回のリリースには次が含まれます。

これらはすべて MIT ライセンスのもとで公開されています。

MLX には、既存の Swift ライブラリではほとんど対応されていなかった、機械学習リサーチにとって重要な機能が備わっています。

何に使えるのか

MLX Swift は Xcode や SwiftPM から手軽にセットアップでき、N 次元配列の構築と演算をシンプルに書けます。次の例では、特に指定しない限りデフォルトのデバイス(GPU)上ですべての演算が実行されます。

import MLX
import MLXRandom

let r = MLXRandom.normal([2])
print(r)
// array([-0.125875, 0.264235], dtype=float32)

let a = MLXArray(0 ..< 6, [3, 2])
print(a)
// array([[0, 1],
//        [2, 3],
//        [4, 5]], dtype=int32)

// last element of 0th row
print(a[0, -1])
// array(1, dtype=int32)

// slice of the first two rows
print(a[0 ..< 2])
// array([[0, 1],
//        [2, 3]], dtype=int32)

// add with broadcast
let b = a + r

print(b)
// array([[-0.510713, 1.04633],
//        [1.48929, 3.04633],
//        [3.48929, 5.04633]], dtype=float32)

MLX Swift では関数変換(function transformation)も利用できます。これはモデルを自動微分で学習させたり、計算グラフを速度やメモリ使用量の面で最適化したりするのに役立ちます。次の例は、ある関数の勾配を計算します。

func fn(_ x: MLXArray) -> MLXArray {
    x.square()
}

let gradFn = grad(fn)

let x = MLXArray(1.5)
let dfdx = gradFn(x)

// prints 2 * 1.5 = 3
print(dfdx)

ドキュメントには、より完全なサンプルも用意されています。

導入・今後の位置づけ

MLX Swift は、機械学習の研究者がさまざまなプラットフォームやデバイスで手軽に実験できる、研究者にとって扱いやすい機械学習フレームワークです。導入を始めるには、Swift 向けのドキュメントとサンプルGitHub リポジトリが参考になります。問題を見つけたり改善の提案があれば issue を、貢献したい場合はコントリビューションガイドラインを通じて参加できます。

なお、MLX はあくまでリサーチ向けであり、アプリでのモデルの本番デプロイを想定したものではない点に注意が必要です。

関連リンク