Hugging Face からのモデルのダウンロード

CP4D版watsonx.aiでは、バージョン4.8.4以降、[「Bring Your Own Model」機能](https://www.ibm.com/docs/ja/cloud-paks/cp-data/4.8.x?topic=assets-deploying-custom-foundation-model)を使用すると、 watsonx.ai の推論機能で使用するためのカスタム・ファウンデーション・モデルをアップロードしてデプロイすることができます。

Hugging Face にあるモデルをアップロードしたい場合、インターネットに接続された環境では、Hugging Face からモデルを直接 git clone できますが、air-gap環境では、一旦インターネット接続環境でモデルをダウンロードしたうえで、それをair-gap環境に転送して使用する必要があります。このような場合に必要となるモデルのダウンロード手順の一例をご紹介します。

こちらのモデルをダウンロードする場合の例です。

https://huggingface.co/cyberagent/open-calm-7b/tree/main

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/9c91f932-c3f5-3005-5eda-fa23e9add52e.png)


## 検証環境
```
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.9 (Ootpa)
```

## 前提要件のインストール
```
yum install python3.12

# python3.12 --version
Python 3.12.1
```

```
yum install python3.12-pip

# pip3.12 list
Package    Version
---------- -------
pip        23.2.1
setuptools 68.2.2
```

## pipを使ったhuggingface_hubインストール
huggingface_hubのインストールは仮想環境で行うことが推奨されています。

```
## 仮想環境の作成
python3.12 -m venv .env

## 仮想環境の有効化
source .env/bin/activate

## huggingface_hubのインストール
pip install --upgrade huggingface_hub
pip3.12 install --upgrade huggingface_hub

## 確認例

(.env) # pip3.12 list
Package            Version
------------------ --------
certifi            2024.6.2
charset-normalizer 3.3.2
filelock           3.15.3
fsspec             2024.6.0
huggingface-hub    0.23.4
idna               3.7
packaging          24.1
pip                23.2.1
PyYAML             6.0.1
requests           2.32.3
setuptools         68.2.2
tqdm               4.66.4
typing_extensions  4.12.2
urllib3            2.2.2
```

## リポジトリ全体のダウンロード

```
(.env) # vi download.py

from huggingface_hub import snapshot_download
snapshot_download(repo_id="cyberagent/open-calm-7b", revision="main")


(.env) # python ./download.py
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????| 1.48k/1.48k [00:00<00:00, 3.35MB/s]
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????| 3.59k/3.59k [00:00<00:00, 7.80MB/s]
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????????| 611/611 [00:00<00:00, 1.76MB/s]
Downloading: 100%|???????????????????????????????????????????????????????????????????????????????????????????????| 116/116 [00:00<00:00, 258kB/s]
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????| 9.93G/9.93G [02:15<00:00, 73.4MB/s]
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????| 3.95G/3.95G [00:53<00:00, 73.3MB/s]
Downloading: 100%|???????????????????????????????????????????????????????????????????????????????????????????| 42.0k/42.0k [00:00<00:00, 274kB/s]
Downloading: 100%|???????????????????????????????????????????????????????????????????????????????????????????????| 129/129 [00:00<00:00, 421kB/s]
Downloading: 100%|??????????????????????????????????????????????????????????????????????????????????????????| 3.23M/3.23M [00:00<00:00, 3.65MB/s]
Downloading: 100%|???????????????????????????????????????????????????????????????????????????????????????????????| 323/323 [00:00<00:00, 971kB/s]
(.env) #


```

これで、`$HOME/.cache/huggingface/hub` 下に `cyberagent--open-alm-7b.main.276a5fb67510554e11ef191a2da44c919acccdf5` ディレクトリが作成されファイルがダウンロードされています。
```
# ls -l cyberagent--open-calm-7b.main.276a5fb67510554e11ef191a2da44c919acccdf5
合計 13556304
-rw-------. 1 root root       3586  6月 21 16:52 README.md
-rw-------. 1 root root        611  6月 21 16:52 config.json
-rw-------. 1 root root        116  6月 21 16:52 generation_config.json
-rw-------. 1 root root 9926368022  6月 21 16:55 pytorch_model-00001-of-00002.bin
-rw-------. 1 root root 3951988632  6月 21 16:56 pytorch_model-00002-of-00002.bin
-rw-------. 1 root root      42028  6月 21 16:56 pytorch_model.bin.index.json
-rw-------. 1 root root        129  6月 21 16:56 special_tokens_map.json
-rw-------. 1 root root    3231617  6月 21 16:56 tokenizer.json
-rw-------. 1 root root        323  6月 21 16:56 tokenizer_config.json
```

watsonx.aiにおいて、air-gap環境でBYOMをデプロイする場合は、これらファイルをair-gap環境に転送し、セットアップしたストレージ(PVC)にアップロードします。


## 参考

https://self-development.info/%E3%80%90%E4%BE%BF%E5%88%A9%E3%80%91huggingface_hub%E3%81%AB%E3%82%88%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/

https://huggingface.co/docs/huggingface_hub/v0.23.4/installation

https://huggingface.co/docs/huggingface_hub/v0.23.4/guides/download