
Colabで試すLLM:無料のGPUで、モデルを動かしてみる
自分のPCにGPUがなくても、Google Colabの無料のGPUでLLMを動かせる。OllamaとTransformersの2通りの動かし方と、使える範囲、禁止されていること、メモリの見積もりを整理する。
Colabなら、GPUのないPCでも、無料でLLMを試せます。ただし動く場所はGoogleのクラウドで、ローカルではありません。動かす部屋は一時的で、外部への公開はできないので、「試す・学ぶ」ために使います。
Colabで何ができるか
Google Colab(コラボ)は、ブラウザで開くノートブックに、Pythonのコードを書いて動かせるサービスです。無料のプランでも、GPUつきの計算機を借りられます。自分のPCにGPUがなくても、LLMを動かして、メモリや量子化の話を、手を動かして確かめられます。
これは「ローカル」ではありません。 Colabの計算機は、Googleのクラウドにあります。入力した文章も、取得したモデルも、そこで動きます。機密の文書や、個人情報は入れないでください。データを手元に置きたいなら、ローカルLLM入門のとおり、自分のPCで動かします。
向いている使い方と、向かない使い方は、次のとおりです。
| 向いている | 向かない |
|---|---|
| LLMの動きを学ぶ、試す | 常に動かし続けるサービス(自動で消える) |
| 小さなモデルや、量子化の効果を比べる | 外部の人が使えるように公開する(禁止されている) |
| 手元のPCに入りきらないモデルを、試しに動かす | 機密の文書を扱う(Googleのクラウドに送られる) |
| 授業や勉強会で、環境の差をなくす | 大量の処理を、決まった時間に確実に動かす(保証がない) |
知っておく制限
制限は、Colabの公式FAQに書かれています。この記事は、2026年10月に確認した内容に基づきます。
- GPUの種類は、変わる:無料の範囲で使えるGPUの種類は、時期によって変わる。一般に、T4が割り当てられることが多いと言われますが、保証はありません
- 資源は、保証されない:無料では、使える量が変動する。混んでいると、GPUが割り当てられないこともある
- 動かせる時間に、上限がある:無料のノートブックは、最大で12時間まで。しばらく操作しないと、切断される
- ランタイムは、消える:仮想マシンは、アイドルが続くと削除され、上限の時間も決まっている。取得したモデルも、消える。ノートブック自体は、Google Driveに保存される
使ってはいけない用途も、定められています(抜粋)。
- Webサービスの提供など、対話的な計算と関係のない用途(外へ公開する使い方を含む)
- 外部のプロキシへの接続
- SSHなどでの遠隔操作や、ノートブックを使わず、主にWeb画面で操作する使い方(無料では予告なく停止されることがある)
- 暗号資産の採掘、複数アカウントでの制限の回避
LLMを動かすときに、トンネルのサービスで、ColabのOllamaを外のアプリから使えるようにする方法が紹介されていることがあります。FAQの内容に照らすと、この使い方は制限に当たる可能性が高いので、この記事では扱いません。呼び出しは、同じノートブックの中から行います。
全体の構成
ノートブックのセルがPythonのコードを実行し、推論エンジン(OllamaまたはTransformers)が、GPUにモデルの重みを載せて答えを作ります。これらはすべて、Googleが用意する一時的な仮想マシンの中で動きます。モデルは配布元から、仮想マシンへ毎回ダウンロードします。ノートブック自体は、Google Driveに保存されます。
準備:GPUをつなぐ
- ノートブックを新しく作る
- 「ランタイム」メニューの「ランタイムのタイプを変更」で、ハードウェアアクセラレータにGPUを選ぶ
- 最初のセルで、GPUが割り当てられたかを確かめる
%%bash
nvidia-smiGPUの名前とメモリの量が表示されれば、割り当てられています。表示されなければ、ランタイムのタイプを見直すか、時間をおいて、もう一度試します。
方法A:Ollamaを、ノートブックの中で動かす
ローカルLLM入門で使ったOllamaを、ノートブックの中にインストールして、動かします。
%%bash
curl -fsSL https://ollama.com/install.sh | shimport subprocess
import time
import urllib.request
# ノートブックの実行を止めないように、サーバーは背景のプロセスとして起動する
server = subprocess.Popen(["ollama", "serve"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
for _ in range(30): # 起動するまで、最大30秒待つ
try:
urllib.request.urlopen("http://localhost:11434")
break
except Exception:
time.sleep(1)%%bash
# <モデル名>は、Ollamaのモデル一覧から選ぶ。ノートブックを開き直すたびに、取得し直す
ollama pull <モデル名>import json
import urllib.request
def chat(question, model="<モデル名>"):
body = {"model": model, "messages": [{"role": "user", "content": question}], "stream": False}
request = urllib.request.Request(
"http://localhost:11434/api/chat",
data=json.dumps(body).encode(),
headers={"Content-Type": "application/json"},
)
with urllib.request.urlopen(request, timeout=300) as response:
return json.load(response)["message"]["content"]
print(chat("日本の首都はどこですか。一文で答えてください。"))インストールで、足りないパッケージのエラーが出ることがあります。メッセージに従って、必要なパッケージを入れてから、やり直してください。インストールの手順は変わることがあるので、公式ドキュメントも見てください。localhostは、このノートブックの計算機の中だけを指します。外の人からは、つながりません。
方法B:Transformersで、直接動かす
もう1つの方法は、Hugging FaceのTransformersライブラリで、モデルを直接読み込むことです。サーバーを立てず、Pythonだけで完結します。メモリが小さいGPUでも載るように、4ビットの量子化(bitsandbytes)で読み込みます。
%%bash
pip install -q transformers accelerate bitsandbytesimport torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
name = "<モデル名>" # Hugging Faceのモデル名
# 4ビットで読み込む。T4など古い世代のGPUはbfloat16を使えないことがあるので、float16にする
quant = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(name)
model = AutoModelForCausalLM.from_pretrained(name, quantization_config=quant, device_map="auto")
messages = [{"role": "user", "content": "日本の首都はどこですか。一文で答えてください。"}]
inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt", return_dict=True).to(model.device)
output = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))モデルによっては、Hugging Faceで利用条件に同意して、アクセストークンを使う必要があります。トークンは、ノートブックのコードに直接書かず、Colabの「シークレット」機能に保存してください。ノートブックを共有したときに、トークンが漏れるのを防げます。
| 観点 | Ollama(方法A) | Transformers(方法B) |
|---|---|---|
| 手軽さ | コマンド数行で動く | Pythonのコードが必要 |
| 形式 | 配布されている量子化済みの形式 | Hugging Faceのモデルを、読み込み時に量子化する |
| 向いている使い方 | 質問を投げて、答えを見る | モデルの中身や、生成の設定を細かく触る |
| ローカルでの再利用 | 自分のPCのOllamaと同じ使い方 | 研究や、ファインチューニングへつなげやすい |
載るモデルの大きさを見積もる
無料で使えるGPUのメモリは、一般に16GB前後のものが多いと言われます(GPUの種類は変わります)。ここに、重みとKVキャッシュが載る必要があります。メモリ見積もりツールや、入門記事の式で、載るかどうかを先に確かめます。
- 70億パラメータ(7B)を4ビットで読み込むと、重みは約3.5GBで、余裕がある
- 140億(14B)の4ビットは約7GBで、載る見込みがある
- 320億(32B)の4ビットは約16GBで、メモリいっぱいになり、載らない可能性が高い
- 長い文脈や、複数の質問を同時に処理すると、KVキャッシュが増える(続編の記事を参照)
GPUに載らないモデルを読み込もうとすると、メモリ不足のエラーで止まります。そのときは、小さなモデルにするか、ビット数を減らします。
ノートブックを整える
ランタイムが消えると、取得したモデルも消えます。次のことを決めておくと、困りません。
- ノートブックの先頭に、環境を作るセルをまとめる(GPUの確認、インストール、サーバーの起動)。開き直したら、上から順に実行すれば、もとに戻る
- モデルは、毎回取得し直すのが基本。時間がかかるので、小さなモデルから試す
- 結果を残したいときは、Google Driveなどに、ランタイムの外へ保存する
- 長い処理を始める前に、GPUが割り当てられていることを確かめる
うまくいかないとき
| 症状 | 考えられる原因 | 試すこと |
|---|---|---|
| GPUが表示されない | ランタイムのタイプがGPUではない、または空きがない | ランタイムのタイプを確認する。時間をおいて、やり直す |
| メモリ不足で止まる | モデルが大きい、文脈が長い | 小さなモデルにする。ビット数を減らす。生成する長さを短くする |
| 途中で切断される | アイドルが続いた、時間の上限に達した | 環境を作るセルを、上から実行し直す |
| モデルの取得が遅い | モデルが大きい | 小さなモデルから試す |
| サーバーにつながらない | 起動が間に合っていない、または落ちている | セル3を、もう一度実行して、起動を待つ |
確認リスト
- 機密や個人情報を、ノートブックに入れていないか(動く場所はGoogleのクラウド)
- ランタイムのタイプを、GPUにしたか。
nvidia-smiで確認したか - 選んだモデルが、GPUのメモリに載ることを見積もったか
- アクセストークンを、コードに直接書かず、シークレットに保存したか
- 外部に公開する使い方を、していないか(Colabでは禁止されている)
- 環境を作るセルを、まとめたか。結果の保存先を決めたか