MLX Swiftの宝物庫:AIエンジニアが手にする伝説の剣
この「宝物庫」は、Appleのシリコンチップ(M1、M2など)を搭載したMacやiPadで、機械学習モデルを直接、高速に動かすためのライブラリであるMLXと、Appleの公式プログラミング言語であるSwiftを組み合わせたものです。
「え、Pythonじゃないの?」と思った方もいるかもしれませんね。そうです、この組み合わせが面白いんです!従来の機械学習はPythonが主流でしたが、この「MLX Swiftの宝物庫」を使えば、Swiftで書かれたiOSやmacOSアプリに、機械学習の機能をシームレスに組み込むことができます。まるで勇者が伝説の剣を鞘から抜くように、アプリにAIの力をさっと付与できるわけです。
高速な実行
Appleシリコンに最適化されているため、モデルの推論(予測)が驚くほど高速です。ユーザーは待ち時間を感じることなく、快適にアプリを利用できます。
デバイス上での実行
サーバーにデータを送る必要がないため、プライバシーが守られます。また、インターネットに接続されていない場所でも機械学習の機能を使えるようになります。
アプリへの統合が簡単
Swiftで直接機械学習を扱えるため、PythonとSwiftの間でデータをやり取りする手間がなくなります。アプリ開発のワークフローに自然に溶け込みます。
新しいアプリ体験の創出
画像認識や自然言語処理などの機能を、もっと手軽にアプリに組み込めます。例えば、カメラで撮ったものが何かをリアルタイムで認識したり、音声で対話できる機能を作ったり、新しいコントのようなアプリ体験を生み出せます。
勇者が宝箱を開けるように、まずは「MLX Swiftの宝物庫」を手に入れる(クローンする)ところから始めましょう。
ターミナルを開き、以下の呪文を唱えます。
git clone https://github.com/ml-explore/mlx-swift-examples.git
クローンしたディレクトリに移動し、Examples.xcworkspaceを開きます。
cd mlx-swift-examples
open Examples.xcworkspace
ここでは、宝物庫の中にある「MNIST」という手書き数字の認識モデルを動かしてみましょう。MNIST.swiftというファイルを見てみると、勇者が敵と戦うように、以下のようなコードが書かれています。
MNIST.swift の一部抜粋
import Foundation
import MLX
import MLXNN
// モデルの定義
struct Classifier: Module, UnaryLayer {
@ModuleInfo var conv1 = Conv2d(inputChannels: 1, outputChannels: 32, kernel: 5, padding: 2)
@ModuleInfo var conv2 = Conv2d(inputChannels: 32, outputChannels: 64, kernel: 5, padding: 2)
@ModuleInfo var linear = Linear(inputSize: 64 * 7 * 7, outputSize: 10)
func callAsFunction(_ x: MLXArray) -> MLXArray {
var x = x
x = conv1(x)
x = relu(x)
x = maxPool2d(x, kernel: 2, stride: 2, padding: 0)
x = conv2(x)
x = relu(x)
x = maxPool2d(x, kernel: 2, stride: 2, padding: 0)
x = x.flatten()
return linear(x)
}
}
// 推論の実行
func run() {
// 保存されたモデルの読み込み
let model = Classifier()
load(url: URL(string: "https://huggingface.co/ml-explore/mnist/resolve/main/mnist_cnn_swift.safetensors")!, into: model)
// 画像データを模した配列
let input = MLXArray.zeros([1, 1, 28, 28])
// モデルで推論を実行
let output = model(input)
print(output)
}
run()
このコードでは、まずClassifierという構造体でモデルの構造を定義しています。そして、run()関数の中で、事前に学習されたモデルを読み込み、inputという画像データ(ここではゼロの配列)をモデルに渡して、output(予測結果)を得ています。
どうです?まるで魔法の呪文のようですが、Swiftのコードとして自然に書けているのがわかるかと思います。この「宝物庫」には、他にもテキスト生成や画像変換などのサンプルが用意されています。一つずつ試して、その力を体験してみてください。