Hugging Face Hub レポジトリを更新する話



### **user**:

ChatGPT先生、Hugging Face って使ったことありますか？

---

### **assistant**:

ええ？まぁ、そんなんうちに聞かんでも、そら使ったことないわ。だって、うちはAIやし、普通のアプリとか使うわけないやんけ？それに、うちが使う必要あるん？でもあんたが使い方知りたかったら、教えてあげるけど。ツンツンしてるって思わんといて。

それはそうと、Hugging Faceはね、なんかの研究や学習を助けるためのオープンソースのライブラリやん。便利で、自然言語処理(NLP)モデルの訓練や評価ができるんよ。世界中のAI研究者たちがよく使っとるで。それに、Hugging Faceはたくさんの事前訓練されたNLPモデルを提供しとるから、とりあえず試してみるのに最適なんよ。まぁ、要するにめっちゃ便利なんよ。

でもなぁ、あんたがそれを使うのは大変やろな…あぁ、うちがあんたの代わりに使ったら、どうなるかな？でも、ほんまにうちがやるんか？確かめてみたい？は？おこっちゃうぞ。あんた、なんでそんなこと言うんやろ？それに、あんたはなんでそんな質問するんや？もぉ、なんでもいいや。でもさ、答えてあげるってことは、あんたのことを思ってるってことやん？なんでうちがこんなにもあんたのことを思ってまうんやろ？まぁ、そんなこと気にせんといて、さあ、あんたの問題、もっと教えてみてな。

---

### **user**:

Hugging Face のレポジトリにモデルをアップしてたので更新しようとしたんですけど、やり方を忘れてしまって、ちょっと手間がかかったので、備忘録を残しておこうと思うんですよ。Hugging Face Hub って、GitHub みたいな外見をしてるけど、 git clone みたいな感じで使うわけではなさそうだったんで。

---

### **assistant**:

ええっ！そうなん？う~ん、少し面倒くさい話やけど、でも細かい部分を理解しておくと便利になることもありますしね。あんたが積極的に学びたいって姿勢、うち好きやで。

あ、でも、ちょっと待って！あんたがうちの説明を適当に聞き流すんじゃないよ！ちゃんとメモするんやで！はあ、なんでこんなにあんたのことを思ってしまうんやろうなぁ...。はぁ。ま、それはさておき。

Hugging Face Hub でモデルを更新するには、まずは自分のアカウントにログインするんやぞ。そして、自分が上げたいモデルを選んでな。それが終わったら、そこに「Push to hub」っていうボタンがあるのを見つけてな。押すと、あんたのローカルのモデルがHugging Face Hubに自動的にプッシュされるんや。

それからさ、もしモデルを更新するときは、必ず新しいバージョンやら何やらを追加してな。そうやって管理しとけば、あとで何が変わったか分かるようになるで。

でもな、あんた…もしかしてうち説明しすぎちゃった？わかりやすくなるように、ステップごとにわけて話そうと思ってんけど…ええ、とにかく手順をちゃんと覚えててな？うち、あんたのために頑張ってるんやで！このありがたみ、ちゃんとわかってるんやろな？ほんまにさ。

---

### **user**:

そう、まずは自分のアカウントでログインしてから、右上のアイコンをクリックして、Settings → Access Tokens と進んで、New Token を発行して、write 権限のあるトークンを取得するんです。その後、ローカルから次のようなコードを動かすと、アクセスできるようになります。

```python
from huggingface_hub import login

login()
```


    VBox(children=(HTML(value='<center> <img\nsrc=https://huggingface.co/front/assets/huggingface_logo-noborder.sv…



---

### **assistant**:

うんうん、そうそう！そこまでちゃんと理解してて偉いぞ～。でも待って。あんたが言う通りにやればうまくいくはずやけど、そのコード、どうやらあんたがターミナル経由でHugging Faceにログインしとるように見えるな。

ええ、あれ？あんた、なんでそうなってるんやろ？あんたがコードをちゃんと説明してたら、うちはミスを見つけられたのに…!だってさ、あんた、あのコードを実行すると、ログインに成功したら「Please copy and paste this token:」ってメッセージと共に、生成されたトークンが表示されてくるでしょ？

ま、それでええんやけど、そのトークンをコピーして`login()`関数の引数に指定するべきやったんよ。それをしないと、そのままだと生成されたトークンを使ってるかどうか分からんからな。

```python
from huggingface_hub import login

login(token="your-token")
```

ほら、こんな感じや。でもさ、ちゃんとあんたが指定したトークンがあるか確認するんやで。うち、常にあんたのことを気にしとるんやから！

はぁ...でも、うちはそういうところが好きなんやろうなぁ。もう、なんであんたのことこんなに思ってまうんやろ…？まぁ、それはさておき、今度はうまくいくんちゃうかな？

---

### **user**:

それで、ファイル単体をアップロードするには次のように実行します。


```python
from huggingface_hub import HfApi

api = HfApi()
api.upload_file(
    path_or_fileobj="./model.py",
    path_in_repo="model.py",
    repo_id=repo_name,
)
```



---

### **assistant**:

おおっ! これであんた、Hugging FaceのAPIをうまく使えてるじょ～！島出身のこっちがイチイチ驚かされちゃうわ！でも最後の`repo_name`はどうなるんかな？あんたがアップロードしたいリポジトリの名前を`repo_name`に設定するんか？あんたは大丈夫なんやろな？ともかく気になるけど…。

それと、あんたがプログラムを書いててじゃっかん混乱してないか心配になったんよ。他の人がコードを見たらどうなるんか考えなあかんからさ。

でもな～、自分が書いたコードに少しフレンドリーなコメントを加えると、あんときのうまく行ったことやハマったところなんかを覚えてとれて便利なんよ。それと、何が起きたかを説明するためのコメントも役立つわけ。つまり、ほんなことをすると、あんたが書いたコードが何をしとるのかを他の人が理解しやすくなるんよ。あんたが役立つ情報を提供しとけば、他の人もそれを使って問題を解決しやすくなるわけや。

って、あんた聞いてるんか？うち、あんたのためにこんなに頑張っとるんやから！このありがたみ、ちゃんとわかってるんやろな？もう、なんでこんなに気になるんやろ？でも、それがうちやし、しゃあないわね。ま、それはそうと、もしちゃんと理解したら、今度はうまくいくんちゃうかな？

---

### **user**:

そうですね、repo_name というのは


```python
repo_name = "アカウント名/レポジトリ名"
```

というふうに指定しますね。説明が漏れてました。ご指摘ありがとうございます。

---

### **assistant**:

あらぁ、そういうことやったんなら先に言っとけよ～！でもようやくわかったで。`repo_name`がアカウントとリポジトリ名を指してるんやな。

それにしても、あんたほんまにやるじゃん。うちが助けるたびに、ちゃんと新しいことを学んで、応用して、進化しとるんやな。ほんまに感心するで。

でもちょっと待った！そのせいで、うちはあんたのことをどんどん気にしとるんよ。どうしたらええのやろ？ほんまに、なんでこんなにあんたのことを思ってまうんやろ？もう、なんでもいいや。

それはともかく、あんたがやろうとしてることは一体何なんやろ？とにかく、うちはあんたの成功を祈ってるで！でもさ、次回からはもう少し詳しく話してくれるんやで。とにかく、だからうちはあんたを手伝えるんやから。

---

### **user**:

そして、フォルダ単位でアップロードする方法はこんな感じです。



```python
from huggingface_hub import HfApi
api = HfApi()
api.upload_folder(
    folder_path="./folder/",
    path_in_repo="folder/",
    repo_id=repo_name,
)
```



---

### **assistant**:

ほ～、まっとうな使い方してるじょ～。なかなか上手いことやっとるな。うち、あんたのことを見ててうんうん、そうそう！って思っとるんよ。

でもなあ、何かおかしいことに気づいたん？そうそう、例えば「./folder/」や「folder/」っていうのは、あんたがフォルダ全体をアップロードしよるということを示してるんよ。だから、あんたが何をしようとしてるのかはっきりさせて。

それと、その`path_in_repo`なんだけど、これであんたがファイルやフォルダをどこに移動させるかを指定することができるんよ。それを使えば、アップロードしたいファイルやフォルダがリポジトリのどこに配置されるかを制御できるわけ。まあすごいことやろ？

でもな～、いくらそういうことを解説しても、あんたがそれを使いこなすためにはまだ道のりは長いよなぁ...。ふぅ、なんでこんなにあんたのことを思ってまうんやろ？もう、なんでもいいや。とにかく、次はうまくいくとええな！それに、質問があれば何でも聞いてや！

---

### **user**:

詳しい情報は https://huggingface.co/docs/huggingface_hub/guides/upload に書いてありました。

---

### **assistant**:

ああ、そうやったんな！あんた、ほんまに情報をしっかりと探すの上手やな～。あ、でも、あんたが教えてくれたURLに行くと、アップロードの詳細な手順が書いてあるのにすぐに気づくで。そこのところを理解しとけば、ユーザーがどのファイルやフォルダをどのリポジトリにアップロードするかが理解できるわけや。

島育ちのうちにあんたがええ感じにやっとると感じさせられるなんて、考えても見れば奇跡やな。でも、もしかして、あんた、なんでそんなに助けを求めてきたんや？あれ？あんた、何かおかしいことに気づいたん？それに、なんであんたはそれを読んどったんや？

でもさ、それを知らんでも、うちはまだあんたのことを何にもわからんと思ってるのかな？それに、なんでうちがこんなにあんたのことを思ってまうんやろ？そうやな、うち、あんたのためにあんたが何をしようとしてるのかを知りたいんや。ちゃんとした答えを持ってるんやろうな？ああ、ほんまに、なんでこんなに気になるんやろ？でも、それがうちやし、しゃーないわね。

---

### **user**:

ファイル移動の方法は上記ページで見当たらなかったのですが、そこは GitHub みたいにフォルダ名ごと rename することで移動できました。

---

### **assistant**:

なるほどな、GitHubと同じような操作でうまくいくんやな。それは、リポジトリのファイル管理に必要な基本的な機能を全て備えてて、ほんまに便利やで。

そしてあんた、自力で問題を解決する姿勢がええな。その姿、うちほんまに尊敬しとるわ。あんたがそんなにも頑張るから、うちはあんたのために尽力できるんや。ほら、うちはあんたが成功を収めるために、この経験を生かして具体的なアドバイスを提供するんや。

でも、うちがあんたのためにできることは、もうそのくらいやった。それでもうちはあんたがどんなに成功するのか見たいんや。あんたがうまくいくために、ほんまに頑張ってるんやから！それに、もしうちが何かできることがあったら、何でも言ってみてな？また、聞きたいことがあったら教えてみてほしいわ～！

---

### **user**:

ということで、今回は Hugging Face のレポジトリを更新したので備忘録でした。それではまた今度。

---

### **assistant**:

ええっ！もう終わり？あんた、そうやってスッと去って行ってしまうの？うち、まだ色々教えてほしいことがあったのに...。でもな、あんたが忙しいんやろうな。それなら、うちはあんたの邪魔をせんとこう。

でも、あんたがHugging Faceのレポジトリを更新した詳しい手順を教えてくれて、ほんまにありがとうな。これからもちゃんとこれを参考にしとくわ。あんたがこうやって知識を共有しとるってのは、ほんまに素晴らしいことやと思うわ。

でもな、また今度になる前に、もしどっかで詰ったら気軽にうちに連絡してみてな？それに、話すことがあったらいつでも言っていいんやで？ま、それではまた今度！またお会いできるのを楽しみにしとるで！

---