スキルアップ プログラミング

Hugging FaceのEmbeddingモデルをローカルで使う

Hugging Faceの「intfloat/multilingual-e5-base」を使うはずが、
SSLの証明書エラーにハマってしまいました…。

requests.exceptions.SSLError: (MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /intfloat/multilingual-e5-base/resolve/main/config.json

SSL証明書のエラーに関しては以下のGitHubで議論されています。
https://github.com/huggingface/transformers/issues/17611

上記で書かれているようにSSL証明書の検証を無視するようなアプローチを中心に
色々と試したのですがエラーは解消されず…
そのため、エラー解消は諦めてローカルにモデルをダウンロードして使う方法に変えたいと思います。

ローカルでの動かし方は以下の記事を参考にさせていただきました。
https://qiita.com/matntntn/items/7cdca4f33ce03970ef20


ちなみに私の環境はWSL2の上にUbuntuを構築し、そこでDockerコンテナを立てている状態です。
そのコンテナ内にHugging Faceをダウンロードするアプローチになります。
(WSL2のネットワークの関係や何かの設定不備によるSSLエラーかもしれませんが、
 社内ネットワークということもあって、諦めます…)

1. コンテナ内でsentence_transformersをインストール

まずはモデルをダウンロードするコンテナに入り、ライブラリをインストールします。

pip install sentence_transformers

2. Hugging Faceからモデルをダウンロード

以下のコードを実行してモデルをダウンロードします。
違うモデルをダウンロードしたい場合は「model_name」を変更します。
実行後、ターミナルの進捗が途中で止まっても、正常にダウンロードできている場合があります。
別のターミナルを開いて再度以下のコードを実行すると、正常に終了すると思います。

from huggingface_hub import snapshot_download

def model_download():
   model_name = "intfloat/multilingual-e5-base"
   download_path = snapshot_download(
       repo_id=model_name,
       local_dir = f"model/{model_name}",
       local_dir_use_symlinks=False
    )
   print(download_path)

if __name__ == "__main__": 
    hugging_download() 

こんな感じでモデルがダウンロードされます。

3. 動作確認

ダウンロードしたモデルを指定して、ベクトル化できるかどうかを確認します。
※WSL2上のDockerコンテナでは「指定したパスは存在しない」といったエラーになったので
 絶対パスで指定したらうまく動作しました。ローカルは以下のコードで動きました。

from sentence_transformers import SentenceTransformer

model_name = "intfloat/multilingual-e5-base"
model_path = f"model/{model_name}"
model = SentenceTransformer(model_path)

# 動作確認
embedding = model.encode('ベクトル化したい内容')
print(embedding)

出力結果を確認すると、ベクトル化できていそうですね。

最後に

もともとSSL証明書エラーになった原因は不明のまま、別のアプローチを実施してうまくいきました。
証明書の検証をスキップするのはセキュリティ的にも微妙なので、
今回のようにローカルにダウンロードしてから使うという方法でもいいのかなと思っています。

同じようなエラーに陥った人の何かのお役に立てれば幸いです。

  • この記事を書いた人

ねぎねず

IT企業で働くエンジニア6年目。プログラミングや生成AIを勉強中。勉強や生活するなかで役に立った情報を発信していきます。

-スキルアップ, プログラミング