ckptファイルの危険性

生成AIを使う場合、学習済モデルとしてckptファイルという形式で提供されていることが多いため、これをそのままダウンロードして使っている方も多いと思います。

しかし、これは非常に危険な行為であると言えます。まさか、これでPCが乗っ取られるとは夢にも思っていないと思います。

そのため、Hugging Faceでは、safetensors形式のファイルを使用するよう推奨しています。

目次

なぜckptファイルが危険なのか

ckptファイルとは何なのか。

「.ckpt」という拡張子は、pickleというPythonモジュールを使い、直列化(バイト列に変換)して保存されたデータに用いられています。この直列化することをpickle化と言います。そして、この直列化したデータを復元することを非pickle化と言います。データを暗号化し、また復号化するのに似ています。

このpickle化は、ほぼあらゆるものをバイト列に変換することできます。関数もバイト列に変換できてしまいます。

これが大きな問題で、悪意のある者がプログラムをckptファイルに忍ばせておけば、非pickle化の段階でそのプログラムを実行することができてしまいます。つまり、ckptファイルを使って画像生成AIを作ろうとしたら、PCが乗っ取られてしまった、ということもありえます。

どこの誰が作ったかわからないckptファイルをダウンロードすることがいかに恐ろしいことか、わかると思います。

Pythonの公式ドキュメントでも警告されています。

警告

pickle モジュールは 安全ではありません 。信頼できるデータのみを非 pickle 化してください。

非 pickle 化の過程で任意のコードを実行する ような、悪意ある pickle オブジェクトを生成することが可能です。信頼できない提供元からのデータや、改竄された可能性のあるデータの非 pickle 化は絶対に行わないでください。

https://docs.python.org/ja/3/library/pickle.html

そのため、私は、ckptファイルは信用できるサイト以外のものは使わないようにしています。使う場合には、ウイルスチェックをするとともに、ckptが安全かどうかを確かめるツール(Python Pickle Malware Scanner)もあるので、それでチェックします。

ckptファイルしかない場合は、safetensorsファイルへ変換するツールもありますので、safetensorsファイルに変換してから使うことをおすすめします。

DiffusionBeeバージョンアップによりsafetensors形式をサポート

Macの場合、DiffusionBeeという画像生成AIアプリが使えますが、これはckptファイルしか使えません。そのため、不用意にckptファイルをダウンロードして着せ替えて使うのはやめておいたほうが無難です。

DiffusionBeeがバージョンアップにより、safetensors形式をサポートしました。これでDiffusionBeeも安心して使えるようになりましたので、手軽に画像生成AIを使いたい方はこちらを選んでも良いと思います。

Stable Diffusion web UIがApple Siliconでも使えるようになりましたので、web UIを使うことをお勧めします。web UIの方が多機能ですし、ほぼ業界標準になっているので、こちらが便利です。DiffusionBeeは操作が簡単ですが、かゆいところに手が届かないところがあるので、web UIを使うと、もう戻れません。

web UIであれば、safetensors形式のファイルを読み込むことができますし、ckpt形式をsafetensors形式に変換することもできます。

目次