ããŒã«ã«LLMãOllamaã§åããïŒå§ãæ¹ãšã¡ã¢ãªã®å£
Ollamaã䜿ãã°ãããŒã«ã«LLMã¯3ã³ãã³ãã§åããŸãã ãããOpenAIäºæã®ãšã³ããã€ã³ããæã£ãŠããã®ã§ãæ¢åã®ã³ãŒãã¯æ¥ç¶å ãå€ããã ãã§ç¹ãããŸãã
ãã ããåãããšãå®åã§äœ¿ãããã®éã«ã¯ã¡ã¢ãªã®å£ããããŸãããã®èšäºã§ã¯ãå§ãæ¹ãæçã§ç€ºããããã§ããã®å£ãã©ãã«ããããèšç®åŒã§ç€ºããŸãã
3ã³ãã³ãã§åãã
# 1. ã€ã³ã¹ããŒã«ïŒmacOSïŒ
brew install ollama
# 2. ãµãŒããŒãèµ·å
ollama serve
# 3. ã¢ãã«ãååŸããŠå®è¡
ollama run qwen3:8b
Linuxãªãå
¬åŒã®ã€ã³ã¹ããŒã«ã¹ã¯ãªãããWindowsãªãã€ã³ã¹ããŒã©ãŒããããŸããollama run ã¯ååã ãã¢ãã«ãããŠã³ããŒããã以éã¯ããŒã«ã«ããèªã¿èŸŒã¿ãŸãã
察話ãæããã«ã¯ /bye ã§ããååŸæžã¿ã®ã¢ãã«ã¯ ollama list ã§ç¢ºèªã§ããŸãã
OpenAIäºæã§æ¢åã³ãŒããç¹ã
ãããOllamaã®ãã¡ã°ãå®çšçãªç¹ã§ããhttp://localhost:11434/v1 ãOpenAIäºæã®ãšã³ããã€ã³ãã«ãªã£ãŠããŸãã
from openai import OpenAI
client = OpenAI(
api_key="ollama", # äœã§ãããïŒæ€èšŒãããªãïŒ
base_url="http://localhost:11434/v1",
)
resp = client.chat.completions.create(
model="qwen3:8b",
messages=[{"role": "user", "content": "ããã«ã¡ã¯"}],
)
print(resp.choices[0].message.content)
base_url ãš model ãå·®ãæ¿ããã ãã§ããOpenAIäºæAPIã§æžãããšããããã®åœ¢åŒã«å¯ããŠãããšæ¥ç¶å
ãèªç±ã«ä»ãæ¿ããããŸããããŒã«ã«ã§è©ŠããŠããã®ãŸãŸã¯ã©ãŠãã®APIã«åãæ¿ããããšããæµããã³ãŒãã®å€æŽãªãã«ã§ããŸãã
ã¡ã¢ãªã®å£ïŒå¿ èŠéã¯èšç®ã§ãã
ããŒã«ã«LLMã§æåã«ã¶ã€ããã®ãã¡ã¢ãªã§ããå¿ èŠéã¯ããããæ¬¡ã®èšç®ã§åºãŸãã
å¿
èŠã¡ã¢ãª â ãã©ã¡ãŒã¿æ° à 1ãã©ã¡ãŒã¿ãããã®ãã€ãæ°
éååïŒéã¿ãäœããããæ°ã§æã€å§çž®ïŒã§ãã€ãæ°ã決ãŸããŸãã
| 粟床 | 1ãã©ã¡ãŒã¿ | 8Bã¢ãã« | 32Bã¢ãã« | 70Bã¢ãã« |
|---|---|---|---|---|
| fp16ïŒç¡å§çž®ïŒ | 2ãã€ã | çŽ16GB | çŽ64GB | çŽ140GB |
| 8bit | 1ãã€ã | çŽ8GB | çŽ32GB | çŽ70GB |
| 4bit | 0.5ãã€ã | çŽ4GB | çŽ16GB | çŽ35GB |
ããã¯éã¿ã ãã®æ°åã§ãå®éã«ã¯ã³ã³ããã¹ãïŒKVãã£ãã·ã¥ïŒãšOSåŽã®äœ¿çšåãäžã«ä¹ããŸããå®åã§ã¯2ã3å²ã®äœè£ãèŠãŠãã ããã
èªã¿æ¹ã¯ãããªããŸãã
- 8Bã¯ã©ã¹ â 4bitã§çŽ4GBãã»ãšãã©ã®ããŒãPCã§åããŸã
- 32Bã¯ã©ã¹ â 4bitã§çŽ16GBã32GBã¡ã¢ãªã®ãã·ã³ãªãçŸå®çã§ã
- 70Bã¯ã©ã¹ â 4bitã§ãçŽ35GBã64GB以äžã®ãã·ã³ãèŠããŸã
- ããä»¥äž â ããã³ãã£ã¢çŽã®ã¢ãã«ã¯ãããããå人ã®ãã·ã³ã«èŒããŸãã
Apple Siliconã®ãŠããã¡ã€ãã¡ã¢ãªã¯ããã®çšéã§ã¯æå©ã§ããGPUã¡ã¢ãªãšã·ã¹ãã ã¡ã¢ãªãå ±æããããããæèŒã¡ã¢ãªã®å€ããã¢ãã«ã«åããŸãã
éååã¯ç¡æã§ã¯ãªã
ã4bitã«ããã°èŒããã¯æ£ããã®ã§ãããå§çž®ããã°åºåå質ã¯èœã¡ãŸãã 4bitã¯å€ãã®çšéã§å®çšçã§ãããé·ãæèã§ã®äžè²«æ§ãã现ããæç€ºã®è¿œåŸã§å·®ãåºãŸãã
éèŠãªã®ã¯ãåãã¢ãã«åã§ãéååã®åºŠåãã«ãã£ãŠå¥ç©ã«ãªããšããç¹ã§ãããããŒã«ã«ã§åããããè©å€ã»ã©è³¢ããªãã£ããã®å€ãã¯ãã¢ãã«ã®åé¡ã§ã¯ãªãéååã®åé¡ã§ãããã³ãããŒã¯ã®ã¹ã³ã¢ã¯éåžžãç¡å§çž®ã«è¿ãç¶æ ã§æž¬ãããŠããŸãã
ããŒã«ã«ãåãçšéã»åããªãçšé
åããŠãã
- æ©å¯ããŒã¿ â å€éšã«äžååºããªãããŒã¿ãæ±ãããããããŒã«ã«æå€§ã®çç±ã§ã
- ãªãã©ã€ã³ â ãããã¯ãŒã¯ããªãç°å¢
- 倧éã®åçŽåŠç â åé¡ãã¿ã°ä»ããäœäžä»¶ãåããªãã黿°ä»£ã ãã§æžã¿ãŸã
- åŠç¿ã»å®éš â ã¢ãã«ã®æåãè§Šã£ãŠçè§£ãã
åããŠããªã
- æé«å質ãèŠãä»äº â ããã³ãã£ã¢çŽã®ã¢ãã«ã¯å人ã®ãã·ã³ã«èŒããŸãã
- ããŸã«ãã䜿ããªã â 䜿ããªãæéãããŒããŠã§ã¢ã®è²»çšã¯çºçããŸã
- åæã¢ã¯ã»ã¹ â ããŒã«ã«ã¯åºæ¬çã«1ãªã¯ãšã¹ããã€ã§ãããããåŠçã®å¹çã§ã¯ã©ãŠãã«å€§ããè² ããŸã
- ææ°ã¢ãã«ããã詊ããã â æå ãžã®ããŠã³ããŒããšç°å¢æŽåãæ¯åå¿ èŠã§ã
æçåå²ã®èãæ¹ã¯ããŒã«ã«LLM vs ãã¹ãåAPIãšæ¯èŒããŒãžã§ãåæãæç€ºããã°ã©ãä»ãã§æŽçããŠããŸãã
çŸå®çãªäœ¿ãåã
ã©ã¡ããäžæ¹ãéžã¶å¿ èŠã¯ãããŸããã æ¥ç¶å ãå€ããã ãã§åãæ¿ããã®ã§ãæ§è³ªã§æ¯ãåããã®ãå®åçã§ãã
from openai import OpenAI
local = OpenAI(api_key="ollama", base_url="http://localhost:11434/v1")
cloud = OpenAI(api_key="<FASTMETAL_API_KEY>", base_url="https://api.fastmetal.ai/v1")
def ask(text: str, sensitive: bool = False):
client, model = (local, "qwen3:8b") if sensitive else (cloud, "anthropic-claude-sonnet-5")
r = client.chat.completions.create(
model=model, max_tokens=500,
messages=[{"role": "user", "content": text}],
)
return r.choices[0].message.content
æ©å¯ããŒã¿ã¯ããŒã«ã«ãå質ãèŠãä»äºã¯ã¯ã©ãŠããåã颿°ã®äžã§åå²ã§ããŸãã
ãªãã¯ã©ãŠãåŽã§ã¯ãããŒã«ã«ã§åããã®ãšåããªãŒãã³ã¢ãã«ã䜿ããŸããããªãŒãã³ã¢ãã«ã䜿ããããæå ã®ã¡ã¢ãªã«èŒããªãããšããå Žåããã¹ãåã®ãªãŒãã³ã¢ãã«ãçŽ çŽãªçãã«ãªãããšãå€ãã¯ãã§ããã¢ãã«ã«ã¿ãã°ã§ç¢ºèªããŠãã ããã
ã€ãŸãããããç¹
ã¡ã¢ãªäžè¶³ã§æ¥µç«¯ã«é ããªã ã¢ãã«ãã¡ã¢ãªã«åãŸããªããšã¹ã¯ãããå§ãŸããå®çšã«ãªããªãé床ã«ãªããŸãããšã©ãŒã§ã¯ãªãããã®ãããé ãããšãã圢ã§çŸããã®ã§ããŸãå¿ èŠã¡ã¢ãªãèšç®ããŠãã ããã
api_key ã空ã«ãã
OpenAI SDKã¯ããŒã空ã ãšãšã©ãŒã«ãªããŸããOllamaåŽã¯æ€èšŒããªãã®ã§ãäœãæååãå
¥ããŠããã°éããŸãã
ã¢ãã«åã®ã¿ã°ãçã
qwen3 ãš qwen3:8b ã¯å¥ç©ã§ããã¿ã°ãçããšæ¢å®ã®ãµã€ãºãéžã°ããŸãã
ã³ã³ããã¹ãé·ãã¯ã©ãŠããšéã ããŒã«ã«ã®ã¢ãã«ã¯æ¢å®ã®ã³ã³ããã¹ãé·ãçãèšå®ãããŠããããšããããŸããé·ãå ¥åãæ±ããªãèšå®ã確èªããŠãã ããïŒã³ã³ããã¹ããŠã£ã³ããŠãšã¯ïŒã
ãµãŒããŒãèµ·åããŠããªã
ollama serve ãåããŠããªããšæ¥ç¶ãæåŠãããŸãã
ãããã質å
Q. ããŒã«ã«LLMã¯ç¡æã§ããïŒ ãœãããŠã§ã¢ãšã¢ãã«ã¯ç¡æã§ãããããŒããŠã§ã¢ãšé»æ°ä»£ã¯ããããŸãã䜿ããªãæéããã®è²»çšã¯çºçããã®ã§ãå©çšéãå°ãªããã¡ã¯åŸé課éã®APIã®ã»ããå®ããªããŸãã
Q. ã©ããããã®ã¡ã¢ãªãå¿ èŠã§ããïŒ ããããããã©ã¡ãŒã¿æ° à 1ãã©ã¡ãŒã¿ãããã®ãã€ãæ°ãã§ãã4bitéååãªã8Bã§çŽ4GBã32Bã§çŽ16GBã70Bã§çŽ35GBãå ããŠã³ã³ããã¹ããšOSåã®äœè£ã2ã3å²èŠãŠãã ããã
Q. ããŒã«ã«ã®ã¢ãã«ã¯ã¯ã©ãŠãã®ã¢ãã«ãšåãå質ã§ããïŒ åãã¢ãã«ã§ãéååã§å質ã¯èœã¡ãŸããããã«ããã³ãã£ã¢çŽã®ã¢ãã«ã¯å人ã®ãã·ã³ã«èŒããªããããäžéãã®ãã®ãéããŸãã
Q. Ollamaã®ã³ãŒãããã®ãŸãŸã¯ã©ãŠãã®APIã«åãæ¿ããããŸããïŒ
ã§ããŸããã©ã¡ããOpenAIäºæãªã®ã§ãbase_url ãš model ãå€ããã ãã§ãã
ãŸãšã
OllamaãªãããŒã«ã«ã®å°å ¥ã¯3ã³ãã³ãã§ãOpenAIäºæãªã®ã§ã³ãŒãããã®ãŸãŸäœ¿ããŸãã倿ã®åããç®ã¯ã¡ã¢ãªã§ãããã©ã¡ãŒã¿æ° à ãã€ãæ°ãã§å¿ èŠéãèšç®ã§ããŸãã4bitã§ã70Bã¯ã©ã¹ã¯çŽ35GBãããã³ãã£ã¢çŽã¯èŒããŸããã
æ©å¯ããŒã¿ã倧éã®åçŽåŠçã¯ããŒã«ã«ãå質ãèŠãä»äºã¯APIââæ¥ç¶å ãå€ããã ãã§åãæ¿ããã®ã§ãäž¡æ¹æã€ã®ããã¡ã°ãçŸå®çã§ããã¯ã©ãŠãåŽã®éžæè¢ã¯ã¢ãã«ã«ã¿ãã°ãã確èªã§ããŸãã