秘密計算を用いてResNetを通すときにどんな手法があり、どのくらい時間がかかるのか

## 概要


秘密計算には非常に多くの手法があり、
それらの考えているセキュリティモデルが異なることや、
安全性の拠り所が異なるために、一概に比べるのが難しいこと、
システム構築や計算速度に対して手法によりトレードオフや、メリットデメリットがあることをお話ししました。

とはいえ、現在同じ様な目的をもった時、
つまりResNetのようなモデルを秘匿状態で評価したい時に、
各手法でどのような性能が近年の実装では行われているのか、
ということについて知っておいた方がいいと思いました。

今記事では、私が探せた限りにはなりますが、
各秘密計算手法でどのくらいの演算オーバーヘッドがかかってくるのかをまとめておこうと思います。


## 今回調査した手法

今回ResNetを秘密計算で推論する際に使う秘密計算の手法は以下です。

- 秘密分散（Nパーティの加法秘密分散法）のみを使うパターン
- 準同型暗号（TFHE型の格子暗号）のみを使うパターン
- 準同型暗号（CKKS形式の格子暗号）と秘密分散（２パーティの加法秘密分散法）をハイブリッドで使うパターン


それではそれぞれ、現在どのくらいの速度と通信量でResNetが秘匿推論できるのかをみていきます。


## 秘密分散（Nパーティの加法秘密分散法）のみを使うパターン

やはり一番動きが盛んなのは、Facebook リサーチのグループが研究開発している

https://github.com/facebookresearch/CrypTen

こちらのCryptTenでしょう。

ResNetの推論を評価した結果も、

https://arxiv.org/pdf/2109.00984.pdf

こちらの論文にまとめられています。

こちらの論文を見る限り、Cryptenはベーシックな加法秘密分散法と、
バイナリ型の秘密分散法、そしてそれらのプロトコルの変換を行う関数を備え、
線形演算は加法秘密分散法を用いて実行、
非線形演算や比較演算などはバイナリ型の秘密分散法
を用いて実行しています。

また、各パーティでの演算はGPUを用いた演算に対応しており、
ライブラリについてもPytorchとなんら変わりないAPIを用いて秘密計算が実行できる様な、
フレームワークというよりはライブラリベースの実装思想で開発がされています。


![Screenshot 2023-08-29 at 19.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/f4913dda-4a9d-f51f-6b6d-491beb4ef92a.png)

さて、こちらのグラフは、ResNet１８を用いて画像認識を行うプロセスのベンチマークですが、
特質すべきは

- 実行速度は非常に高速
- 通信量が非常に大きい
- 推論の精度ビットは１6ビット

ということです。
どちらのグラフも、分散するパーティの数をx軸にとったグラフとなっていますが、
実行速度については１秒から数秒くらいで収まっています。
一方で、１推論に１００GBくらいの通信が必要というところはやはり秘密分散を用いるとしょうがないのだろうと思います。この値は、事前に各パーティが入力データによらずに前もってやりとりするシェア（掛け算に使うBever tripleのこと）も含まれているので、
実際に推論が実行される時のデータ転送量はこれより少ないとは思いますが、それでも１００GB単位でデータのやりとりが必要になることは、秘密分散のみを用いるパターンでは避けられないというとは理解しておきましょう。

## 準同型暗号（TFHE型の格子暗号）のみを使うパターン

さて、準同型暗号のみを用いて演算を完結させようとすると、
完全準同型暗号を用いる必要があります。
完全準同型暗号とは、掛け算回数などの制約なしに任意の回路について暗号状態で実行できる機構（ブートストラップ）をもった準同型暗号です。
この手法において世界でもトップの研究開発力をもっているZamaAIという会社が発表した論文では、
こちらの完全準同型暗号を用いて画像認識用のAIモデルを推論した評価結果に言及しています。

https://eprint.iacr.org/2023/257.pdf

この中で一番大きいモデルはVGG-9モデルですが、
その評価結果は

- 実行時間18000秒
- データの通信量はほぼ０に近い（推論中に通信を挟まない）
- 推論の精度ビットは１３ビット

となっています。
準同型暗号の推論は非常に遅く、たった１推論で１８０００秒（５時間くらい）かかっていますね。
現在ZamaAIも開発しているハードウェアによる高速化などが進めば、これが１０００倍単位で高速化されることになる、と言われていますから、
それだと実際に使えるレベルになりうるか、といったところでしょうか。
しかしながら、現状のCPUベースの実行であれば、この推論時間が準同型暗号のリアルです。
データの通信量はほとんど考えなくていいのは準同型暗号のメリットですね。
ただし、高速化を図るために推論時の精度ビットは１３ビットに落としており、
おそらく１６ビット（半精度）や３２ビット（フル精度）で実行しようとすると実行時間がさらに極端に大きくなるのだと思います。
このように精度を１６ビットより小さくしなければならないということは大きなデメリットになる可能性がありますね。



## 準同型暗号（CKKS形式の格子暗号）と秘密分散（２パーティの加法秘密分散法）をハイブリッドで使うパターン

さて、秘密分散のみ使ったパターンでは通信量が大きすぎることや、
準同型暗号のみ使ったパターンでは速度が遅すぎることから失望された方も多いと思いますが、

このハイブリッド方式は、両方の手法のいいところをとったものであり、
一番現時点で有望な実装方法と考えて大丈夫です。

https://qiita.com/kenmaro/items/2c952ff9c16278ef2a41

前回書いた記事で紹介した、Alibabaリサーチによる実装では、

ResNet50を

- 134秒で推論
- 2.5GBの通信量

で秘匿推論しています。

１３４秒でも遅いと思われる方もいるかもしれませんが、現状の実装ではこれが最速でしょう。
また、論文内では、医療用画像で診断を行う際のAIモデルに対して、患者の医療画像を秘匿したまま、
２分ほどで推論を実行できることはユースケースになりうる、
と書かれていましたが、まさに場所を選べば２分くらいの推論時間は問題にならないこと十分考えられます。


## まとめ

今回は、画像認識のバックボーンとして使われることも多い
ResNetやVGGなどのバックボーンを秘密計算で推論実行するような応用研究において、
最新の技術を使ったらどのくらいの制約があるのか、
ということについて言及しました。


今回は、秘密計算というと語られることの多い

- 秘密分散
- 準同型暗号

の２つを特にご紹介しましたが、このほかにも

- 差分プライバシー
- TEE（秘匿実行環境）

など、セキュリティ要件によってはこれらが使われることも十分に考えられ、
これらでもおそらくResNetなどは評価可能です。

これらの手法で評価した時のオーバーヘッドなどについても、
分かり次第アップデートしたいと思います。


みなさんもぜひ秘密計算の応用研究について最新の論文などをあさってみてはいかがでしょうか。


今回はこの辺で。


@kenmaro