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

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を勉強中。勉強や生活するなかで役に立った情報を発信していきます。

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