CLOUDFLAREでLLMを動かす


# 記事の対象者
- CLOUDFLAREの使い方全般を知りたい人向けではなく、CLOUDFLAREでLLMを動かしてみたい（特殊な？）人向けです。


# CLOUDFLAREとは？
筆者自身も詳しくはないですが、調べた限りで超ざっくり言えば、「**本来はCDN（Contents Delivery Network）の機能を持つが、一部AIモデルも使えるSaaS**」です。

- 使えるAIモデルの例：
    - `whipser`
    - `llama`
- [他にもあるので、確認したい方はこちら](https://developers.cloudflare.com/workers-ai/models/)

AIモデルの利用に関しては、上限がありますが、無料で使うことが可能です。料金体系についてですが、`Neuron`という独自の課金体系が存在しており、1日10,000 Neuronまでは無料です。Neuronの使用量は（イギリス時間で）0:00にリセットされます。

# CLOUDFLAREでLLMを動かすための手順

ここからCLOUDFLAREでLLMを動かすための手順を解説します。

流れとしては、ざっくりと、`アカウントを作成->APIトークンを作成->REST APIでLLMを呼び出す`という流れです。

## アカウントを作成

[このページからアカウントをまずは作成します](https://dash.cloudflare.com/sign-up)。 Googleアカウントを持っている人はGoogleアカウントを使うのが手軽だと思います。

▼アカウント作成画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/f1f47398-cef7-4b55-ad62-e32c401c544b.png)

▼アカウント作成後に表示されるダッシュボード画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/175c8932-3617-40a5-8d84-da4d092d7f14.png)


もしかしたらこのような画面が出るかもしれないですが、AIモデルを動かしたいだけであれば、ドメインを購入／登録する必要はないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/699834cb-9dc7-4e25-afaf-6c81420fc205.png)



## APIトークンを作成

▼ 画面左にあるメニューを下にスクロールして、 AI > WorkersAIをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/d9909966-6d67-45c8-a50e-b17af4a0efb7.png)

▼ "REST API"を選択すると下のような画面へ遷移する
![Untitled Diagram.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/34db38f6-465d-4ca5-ba41-b9af81af93c3.png)

▼ APIトークンを作成する（特に変更せずそのままでOKです）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/067b7f9d-53bc-4c50-a8d1-52a480a070e4.png" width=50%>



※作成したAPIトークンは無くさないでください。

## プログラムを作成する

基本的には、画面上に表示されているpythonコードを利用すれば良いです。

![Untitled Diagram-Page-3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687015/86786b2f-17eb-43c7-b9d9-1161beecaa17.png)

アカウントIDやAPIトークン、モデルを変数として別で書き出しておきたい場合は、以下のようにしておくと便利だと思います。

```python
ACCOUNT_ID = "<ご自身のアカウントID>"
API_TOKEN = "<作成したAPIトークン>"
MODEL = "<利用したいモデル>" # 例えば、"llama-4-scout-17b-16e-instruct"

import requests


API_BASE_URL = f"https://api.cloudflare.com/client/v4/accounts/{ACCOUND_ID}/ai/run/"
headers = {"Authorization": f"Bearer {API_TOKEN}"}


def run(model, inputs):
    input = { "messages": inputs }
    response = requests.post(f"{API_BASE_URL}{model}", headers=headers, json=input)
    return response.json()


inputs = [
    { "role": "system", "content": "You are a friendly assistan that helps write stories" },
    { "role": "user", "content": "Write a short story about a llama that goes on a journey to find an orange cloud "}
];
output = run(f"@cf/meta/{MODEL}", inputs)
print(output)
```

▼ 出力

```shell
{'result': {'response': "Once upon a time, in a lush green valley surrounded by towering mountains, there lived a curious llama named Lola. Lola was known for her bright, inquisitive eyes and her love for exploring the world around her. One day, while gazing up at the sky, Lola spotted something that caught her attention - a fluffy orange cloud drifting lazily across the horizon.\n\nIntrigued by the cloud's vibrant color, Lola decided that she had to see it up close. She packed a small bag with some snacks and her favorite blanket, and set off on an adventure to find the orange cloud.\n\nAs she trekked through the valley, Lola encountered all sorts of creatures, from chatty birds to playful rabbits. But none of them knew where the orange cloud was or how to get to it. Undeterred, Lola pressed on, her determination driving her forward.\n\nAfter many hours of walking, Lola reached the foot of a tall mountain. She knew that the cloud must be hiding somewhere on its slopes, so she began to climb. The air grew thinner and the path grew steeper, but Lola persevered, her llama legs strong and sure.\n\nAs she ascended higher, the clouds grew thicker and the wind picked up. Lola's ears flapped in the", 'usage': {'prompt_tokens': 43, 'completion_tokens': 256, 'total_tokens': 299}}, 'success': True, 'errors': [], 'messages': []}
```


# まとめ

今回はCLOUDFLAREでローカルLLMを動かしてみました。
利用量の上限はあるものの、無料で試せるのはありがたいですね。