ã¯ããã« æ¬èšäºã§ã¯ãSUSE AI Factory ã§æäŸãããŠããæšè«ãšã³ãžã³ã®1ã€ã§ããOllamaã®ä»çµã¿ãšç¹åŸŽã解説ããåŸåã§ã¯ãOllamaã®APIãå©çšããã¢ãã«ãµãŒãã³ã°ããã³æšè«APIã®å®è¡æé ã«ã€ããŠãã¢åœ¢åŒã§ç޹ä»ããŸãããªããOllamaã®ã€ã³ã¹ããŒã«æ¹æ³ã«ã€ããŠã¯ãOpen WebUIã®ã€ã³ã¹ããŒã«æã«äžç·ã«ã€ã³ã¹ããŒã«ãããããæ¬èšäºã§ã¯æ±ã£ãŠããŸãããã€ã³ã¹ããŒã«ã«ã€ããŠè©³ããç¥ãããæ¹ã¯ ãSUSE AI Factoryã§ã®Open WebUIå°å
¥æé 解説 ãAirGapç°å¢ãžã®Open WebUIã»Ollamaæ§ç¯ãã ããåç
§ãã ããã ä»ã®SUSE AI Factory ã®æ§æèŠçŽ ã«ã€ããŠã¯ã ãSUSE AI Factoryãæ§æããAIã¢ããªã±ãŒã·ã§ã³åŸ¹åºè§£èª¬ ãOSSã§æ§ç¯ãããšã³ã¿ãŒãã©ã€ãºçæAIåºç€ãã ãã芧ãã ããã ã¢ãã«ãµãŒãã³ã°ãšã¯ ã¢ãã«ãµãŒãã³ã°ãšã¯ãåŠç¿æžã¿ã®AIã¢ãã«ããµãŒããŒäžã«åžžé§ãããã¢ããªã±ãŒã·ã§ã³ããAPIçµç±ã§æšè«ãå®è¡ã§ããããã«ããä»çµã¿ã§ãã ç¹ã« LLMïŒå€§èŠæš¡èšèªã¢ãã«ïŒã§ã¯ãæ° GB 以äžã®ããŒã¿ã GPU ã¡ã¢ãªã«èªã¿èŸŒãã§åäœããããããªã¯ãšã¹ãã®ãã³ã«ããŒãããã®ã§ã¯ãªãããããããã¢ãã«ãå±éãããµãŒããŒãèµ·åããŠãããHTTP API ã§ãªã¯ãšã¹ããåãä»ããæ§æãäžè¬çã§ãããã®ãã¢ãã«ãèªã¿èŸŒãã§æšè«ãå®è¡ããAPIãæäŸãããœãããŠã§ã¢ããæšè«ãšã³ãžã³ãšåŒã³ãŸãã Kubernetes ã§ã¢ãã«ãµãŒãã³ã°ãè¡ãå Žåã¯ãæšè«ãšã³ãžã³ãPodãšããŠåãããServiceã§ APIãå
¬éããŸããAirGapç°å¢ã§ã¯ãã¢ãã«ããŒã¿ã¯ããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åããŠããã®ã¹ãã¬ãŒãžãšé£æºããŠããPVçµç±ã§æšè«ãšã³ãžã³ã«ã¢ãã«ãèªã¿èŸŒãŸããŸãããŸããæšè«ãšã³ãžã³ã®ã€ã¡ãŒãžãHelmãã£ãŒãã¯ãã©ã€ããŒãã¬ãžã¹ããªã«ä¿åããããããååŸããŸãã Ollamaãšã¯ Ollamaã¯ãããŒã«ã«ç°å¢ã§æè»œã«LLMãåããããªãŒãã³ãœãŒã¹ã®æšè«ãšã³ãžã³ã§ãã ollama pull / ollama run ã®ããã« Dockerã«äŒŒãæäœæã§ã¢ãã«ã管çããAPI ãµãŒããŒãšããŠæšè«æ©èœãæäŸããŸãã Go ã§æžããã OllamaãµãŒããŒã APIãšã¢ãã«ç®¡çãæ
ããã¢ãã«ããšã®ã©ã³ããŒãæšè«ãå®è¡ããŸããæšè«ãšã³ãžã³ã«ã¯ãC++ ã§é«éã«åäœãã llama.cpp ãæ¡çšããŠããŸããäž»ãªç¹åŸŽã¯æ¬¡ã®éãã§ãã ã³ã³ããã€ã¡ãŒãžã«äŒŒãã¢ãã«ç®¡çïŒ ã¢ãã«ã¯ãããã§ã¹ããšã¬ã€ã€ãŒã§æ§æãããllama3.1:8bã®ããã«ã¿ã°ã§æå®ãããModelfileã§ã·ã¹ãã ããã³ãããªã©ãå ããç¬èªã¢ãã«ãäœãã éååïŒGGUFïŒïŒ éã¿ã4ã8ãããã«å§çž®ããã¢ãã«ãäžå¿ã«å©çšããã8Bã¢ãã«ã®å ŽåãFP16ã§ã¯çŽ16GBå¿
èŠãªéã¿ããQ4_K_Mã§ã¯çŽ5GBã«åãŸã èªåçãªã¡ã¢ãªç®¡çïŒ ã¢ãã«ã¯ãªã¯ãšã¹ãæã«èªã¿èŸŒãŸããæ¢å®ã§ã¯5 å䜿ãããªããšè§£æŸãããïŒOLLAMA_KEEP_ALIVEã§èšå®å¯èœïŒ 2 çš®é¡ã®APIïŒ ç¬èªAPIïŒ/api/chatãåã蟌ã¿çšã® /api/embed ãªã©ïŒãšOpenAIäºæAPI ïŒ/v1/chat/completionsã/v1/modelsãªã©ïŒãæäŸãã Ollamaã®èšå® Ollamaã¯Open WebUIã®ã€ã³ã¹ããŒã«æã«äžç·ã«ã€ã³ã¹ããŒã«ããããããå
·äœçãªã€ã³ã¹ããŒã«æ¹æ³ã«ã€ããŠã¯ãã®èšäºã§ã¯çç¥ããŸãããã®èšäºã§ã¯ãäž»ã«Ollamaã§äœ¿çšããã¢ãã«ã®ããŠã³ããŒããšé
眮æé ã«ã€ããŠèª¬æããŸãã åææ¡ä»¶ åºæ¬çãªåææ¡ä»¶ã¯ã ãSUSE AI Factoryã§ã®Open WebUIå°å
¥æé 解説 ãAirGapç°å¢ãžã®Open WebUIã»Ollamaæ§ç¯ãã ã®åææ¡ä»¶ããåç
§ãã ããã äžèšã«å ããŠã以äžã®æ¡ä»¶ã远å ãããŸãã Open WebUIã®ã€ã³ã¹ããŒã«ïŒ SUSE AI Factoryã³ã³ããŒãã³ããšã㊠Open WebUI ã®ãããã€ãå®äºããŠããããš ãã©ã¡ãŒã¿ã®èª¬æ Open WebUIã®ã€ã³ã¹ããŒã«æã«èšå®ããOllamaé¢é£ã®äž»èŠãã©ã¡ãŒã¿ã«ã€ããŠèª¬æããŸãã ã€ã³ã¹ããŒã«æã«å©çšããå
šäœã®èšå®ã«ã€ããŠã¯ãOpen WebUIã®ç޹ä»ã®ãªã³ã¯ãããåç
§ãã ããããŸãã以äžã®è¡šã®èšå®å€ã¯ãã€ã³ã¹ããŒã«æã«èšå®ããå€ãèšèŒããŠããŸããããã®åŸã®ãã¢ã®èª¬æã«é¢ä¿ããäžéšã®ãã©ã¡ãŒã¿ã¯èšå®å€ããã€ã³ã¹ããŒã«æç¹ã§ã¯èšå®ãªããã«ããŠèšèŒããŠããŸãã ãããã€èšå®(ollama) ã㌠èšå®å€ æå³ enabled true Open WebUIã®ãã£ãŒãã®äŸåãšããŠãOllamaãäžç·ã«ã€ã³ã¹ããŒã«ããããã®èšå® nodeSelector accelerator: nvidia-gpu Ollamaã®PodãGPUããŒãã«é
眮ããnodeSelectorèšå® tolerations nvidia.com/gpu=dedicated:NoSchedule Ollamaã®PodãGPUããŒãã«é
眮ããtolerationsèšå® resources requests: cpu: “2” memory: “4Gi” limits: cpu: “4” memory: “8Gi” Ollamaã®Podã䜿ããCPUãšã¡ã¢ãªã®äžéãšç¢ºä¿é replicaCount 1 Ollamaã®Podã®æ° image image: registry: <ã³ã³ããã¬ãžã¹ããªã®ãã¡ã€ã³> repository: <ollamaã€ã¡ãŒãžã®ãªããžããª> tag: <ollamaã€ã¡ãŒãžã®ããŒãžã§ã³> Ollamaã®ã€ã¡ãŒãžååŸã®ããã®èšå® GPUèšå®(ollama.ollama.gpu) ã㌠èšå®å€ æå³ enabled true GPUã䜿çšããããã®èšå® type nvidia GPUã®çš®é¡ number 1 PodãèŠæ±ããGPUã®æ° ã¢ãã«èšå®(ollama.ollama.models) ã㌠èšå®å€ æå³ pull [ ] èµ·åæã«ã€ã³ã¿ãŒãããããååŸããã¢ãã«ãæå® run ã€ã³ã¹ããŒã«æç¹ã§ã¯èšå®ãªã èµ·åæã«ã¡ã¢ãªãžããŒãããã¢ãã«ãæå® create ã€ã³ã¹ããŒã«æç¹ã§ã¯èšå®ãªã èµ·åæã«ã«ã¹ã¿ã ã¢ãã«ã«ãäœæããããã®èšå® ã¹ãã¬ãŒãžèšå®(ollama.persistentVolume) ã㌠èšå®å€ æå³ enabled true PVã䜿çšããããã®èšå® existingClaim ollama-models-pvc 䜿çšããPVC ç°å¢å€æ°(ollama.extraEnv) ã㌠èšå®å€ æå³ OLLAMA_MAX_LOADED_MODELS “2” ã¡ã¢ãªã«åæã«ããŒãã§ããã¢ãã«ã®æå€§æ° OLLAMA_NUM_PARALLEL “4” 1ã€ã®ã¢ãã«ããåæã«åŠçã§ãããªã¯ãšã¹ãã®æ° OLLAMA_KEEP_ALIVE ã€ã³ã¹ããŒã«æç¹ã§ã¯èšå®ãªã ã¢ãã«ãã¡ã¢ãªã«ä¿æããæé(æ¢å®ã¯5å) å
¬éèšå®(ollama.ingress) ã㌠èšå®å€ æå³ enabled true Ollamaã®Ingressãæå¹åããããã®èšå® className traefik 䜿çšããIngressClasså hosts <Ollamaæ¥ç¶çšã®ãã¹ãå> Ollamaæ¥ç¶çšã®ãã¹ãå Ollamaã®ã¢ãã«ãµãŒãã³ã°ã㢠æ¥ç¶èšå® Ollamaã®ServiceïŒopen-webui-ollamaïŒã¯ã¯ã©ã¹ã¿ãŒå
éšåãïŒClusterIPïŒãšããŠæ§æãããŠããŸããäœæ¥çšç«¯æ«ãã kubectl port-forward ãå®è¡ããAPI ããŒãïŒ11434ïŒãããŒã«ã«ã«å
¬éããŸãã $ kubectl port-forward -n open-webui-system svc/open-webui-ollama 11434:11434 > /tmp/pf-ollama.log 2>&1 & 以éã®curlã³ãã³ãã¯ãhttp://localhost:11434ã«å¯ŸããŠå®è¡ããŸãã ããŠã³ããŒãããã¢ãã«ã®ç¢ºèª å©çšå¯èœãªã¢ãã«äžèЧãååŸãã /api/tags ãåŒã³åºããOpen WebUIã€ã³ã¹ããŒã«æã«æ ŒçŽããã¢ãã«ããŒã¿ãæ£ããèªèãããã確èªããŸãã $ curl -s http://localhost:11434/api/tags | jq . # åºåäŸ ubuntu@ip-10-1-50-10:~$ curl -s http://localhost:11434/api/tags | jq . { "models": [ { "name": "gemma4:12b", "model": "gemma4:12b", "modified_at": "2026-10-02T07:10:22.444133991Z", "size": 8021618941, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "imatrix-20260927-12b/model-q4_K_M.gguf", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M", "context_length": 262144, "embedding_length": 3840 }, "capabilities": [ "completion", "tools", "thinking", "vision" ] }, { "name": "embeddinggemma:300m", "model": "embeddinggemma:300m", "modified_at": "2026-10-02T07:12:06.090479003Z", "size": 621875917, "digest": "85462619ee721b466c5927d109d4cb765861907d5417b9109caebc4e614679f1", "details": { "parent_model": "embeddinggemma:300m-bf16", "format": "gguf", "family": "gemma3", "families": [ "gemma3" ], "parameter_size": "307.58M", "quantization_level": "BF16", "context_length": 2048, "embedding_length": 768 }, "capabilities": [ "embedding" ] } ] } ã¬ã¹ãã³ã¹ã«é
眮ãã gemma4:12b ããã³ embeddinggemma:300m ãå«ãŸããŠããã°ãæ ŒçŽããã¢ãã«ã Ollama ã«æ£åžžã«èªèãããŠããŸãã ã¢ãã«ã®ããŒã Ollamaã§ããã¹ãçæã¢ãã«ãããŒãããã«ã¯ã/api/generate ãå©çšããŸãã ããã³ãããå«ããã«ã¢ãã«åãškeep_aliveãæå®ããŠãªã¯ãšã¹ããéä¿¡ãããšãã¢ãã«ãäºåã«GPU ã¡ã¢ãªãžå±éïŒããªããŒãïŒã§ããŸãã $ curl -s http://localhost:11434/api/generate -d '{ "model": "gemma4:12b", "keep_alive": "10m" }' | jq . # åºåäŸ { "model": "gemma4:12b", "created_at": "2026-11-02T02:51:57.999170021Z", "response": "", "done": true, "done_reason": "load" } ããŒãå®äºåŸãçŸåšã®ããŒãç¶æ³ã以äžã®ã³ãã³ãã§ç¢ºèªããŸãã $ curl -s http://localhost:11434/api/ps | jq . # åºåäŸ { "models": [ { "name": "gemma4:12b", "model": "gemma4:12b", "size": 2534439649, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M" }, "expires_at": "2026-11-02T03:01:58.004382982Z", "size_vram": 2534439649, "context_length": 4096 } ] } äžèŠ§ã« gemma4:12b ã衚瀺ãããsize_vramïŒGPU ã¡ã¢ãªäžã®å°æéïŒãš expires_atïŒã¢ã³ããŒãäºå®æå»ïŒã確èªã§ããŸãã ãŸããOllama ã§ã¯ããã¹ãçæã¢ãã«ã ãã§ãªããEmbeddingã¢ãã«ãåæ§ã«ãµãŒãã³ã°ã§ããŸããEmbeddingã¢ãã«ã¯æšè«çšã¢ãã«ãããŒãããAPIïŒ/api/generateïŒã«å¯Ÿå¿ããŠããªããããåã蟌ã¿çšAPIïŒ/api/embedïŒã«é©åœãªinputãèšå®ããŠããŒãããŸãã $ curl -s http://localhost:11434/api/embed -d '{ "model": "embeddinggemma:300m", "input": "test", "keep_alive": "10m" }' | jq . # åºåäŸ { "model": "embeddinggemma:300m", "embeddings": [ [ãã¯ãã«å€æçµæ] ], "total_duration": 12810597793, "load_duration": 12556493665, "prompt_eval_count": 3 } åã蟌ã¿ãã¯ãã«ïŒæ°å€é
åïŒãè¿ã£ãŠããããå床ããŒãç¶æ
ã確èªããŸãã $ curl -s http://localhost:11434/api/ps | jq . # åºåäŸ { "models": [ { "name": "embeddinggemma:300m", "model": "embeddinggemma:300m", "size": 681417113, "digest": "85462619ee721b466c5927d109d4cb765861907d5417b9109caebc4e614679f1", "details": { "parent_model": "", "format": "gguf", "family": "gemma3", "families": [ "gemma3" ], "parameter_size": "307.58M", "quantization_level": "BF16" }, "expires_at": "2026-11-02T03:06:45.557738706Z", "size_vram": 681417113, "context_length": 2048 }, { "name": "gemma4:12b", "model": "gemma4:12b", "size": 2534439649, "digest": "6114515d63c17436a7c0417d82820ac65ad643e2806c5a3c89cb62846436ed0b", "details": { "parent_model": "", "format": "gguf", "family": "gemma4", "families": [ "gemma4" ], "parameter_size": "11.9B", "quantization_level": "Q4_K_M" }, "expires_at": "2026-11-02T03:01:58.004382982Z", "size_vram": 2534439649, "context_length": 4096 } ] } gemma4:12bãšembeddinggemma:300mã®2ã€ã®ã¢ãã«ã GPU ã¡ã¢ãªäžã«ããŒããããŠããããšã確èªã§ããŸãã ã¢ãã«ã®ã¢ã³ããŒã /api/generateã®ãªã¯ãšã¹ãã§keep_alive: 0ãæå®ããŠéä¿¡ãããšãã¢ãã«ãå³åº§ã«ã¡ã¢ãªããè§£æŸã§ããŸãã $ curl -s http://localhost:11434/api/generate -d '{ "model": "gemma4:12b", "keep_alive": 0 }' | jq . # åºåäŸ { "model": "gemma4:12b", "created_at": "2026-11-02T03:05:20.847281172Z", "response": "", "done": true, "done_reason": "unload" } ã¬ã¹ãã³ã¹ã« “done_reason”: “unload” ãå«ãŸããŠããããšã確èªããã¢ãã«ã®ããŒãç¶æ
ãå確èªããŸãã $ curl -s http://localhost:11434/api/ps | jq . # åºåäŸ { "models": [] } äžèЧãã gemma4:12b ãæ¶ããGPU ã¡ã¢ãªãè§£æŸãããããšã確èªã§ããŸãã â»çŽåã«ããŒããã embeddinggemma:300m ã¯keep_aliveã®æéåãïŒãŸãã¯åæ§ã®æé ã§è§£æŸïŒã«ããã¢ã³ããŒããããŠãããã®ãšããŸã æšè«APIã®å®è¡ /api/chatã䜿çšããã¢ãã«ãæå®ããŠãã£ããæšè«ãå®è¡ããŸãã ããã§ã¯ gemma4:12bãæå®ãããªã¯ãšã¹ããã©ã¡ãŒã¿ã« “think”: true ãæå®ããããšã§ãã¢ãã«ãåçãçæãããŸã§ã®æèããã»ã¹ïŒthinkingïŒãããããŠååŸããŸãã $ curl -s http://localhost:11434/api/chat -d '{ "model": "gemma4:12b", "messages": [{"role": "user", "content": "(50+1)x4ã¯ïŒ"}], "stream": false, "think": true }' | jq . # åºåäŸ { "model": "gemma4:12b", "created_at": "2026-11-02T03:07:00.770889659Z", "message": { "role": "assistant", "content": "(50+1)x4ã®èšç®çµæã¯ **204** ã§ãã\n\nèšç®ã®é åºïŒ\n1. ãã£ãã®äžãèšç®ïŒ50 + 1 = 51\n2. ãã®çµæã4åããïŒ51 à 4 = 204", "thinking": "* Expression: $(50+1) \\times 4$\n * Goal: Solve the mathematical expression.\n\n * Parentheses first: $(50 + 1)$\n * Multiplication second: $(\\text{result}) \\times 4$\n\n * Step 1: $50 + 1 = 51$\n * Step 2: $51 \\times 4 = ?$\n * $50 \\times 4 = 200$\n * $1 \\times 4 = 4$\n * $200 + 4 = 204$\n\n * The answer is 204." }, "done": true, "done_reason": "stop", "total_duration": 21696670723, "load_duration": 15345151661, "prompt_eval_count": 26, "prompt_eval_duration": 338108000, "eval_count": 224, "eval_duration": 5992482000 } ã¬ã¹ãã³ã¹ã®message.contentã«èšç®çµæãè¿ã£ãŠããŠããã»ããmessage.thinkingã«ã¢ãã«ã段éçã«èšç®æé ãçµã¿ç«ãŠãæèéçšãåºåãããŠããããšã確èªã§ããŸãã ãŸããçŽåã®æé ã§ã¢ãã«ãã¢ã³ããŒããããããä»åã®ãªã¯ãšã¹ãæã«ã¯ ã¢ãã«ã®åããŒããçºçããããŒãã ãã§çŽ15.3ç§ããã£ãŠããããšãload_durationã®å€ããåãããŸãããªã¯ãšã¹ãæã®ã¬ã€ãã³ã·ãæããããã«ã¯ããããããã¢ãã«ãã¡ã¢ãªäžã«åžžé§ãããŠããããšãéèŠã§ãã è£è¶³ãšããŠãååšããªãã¢ãã«ãæå®ããå Žåã®æåã確èªãããããååšããªãã¢ãã«åãæå®ããŠãªã¯ãšã¹ããéä¿¡ããŠã¿ãŸãã $ curl -s http://localhost:11434/api/chat -d '{ "model": "nothing", "messages": [{"role": "user", "content": "ããã«ã¡ã¯"}], "stream": false }' | jq . # åºåäŸ { "error": "model 'nothing' not found" } æåŸ
éããã¢ãã«ãèŠã€ãããªãæšã®ãšã©ãŒïŒmodel ‘nothing’ not foundïŒãè¿ããæå®ããã¢ãã«ã®ã¿ãå®å
šã«ã«ãŒãã£ã³ã°ãããŠããããšã確èªã§ããŸãã å€éšããã®æšè«APIã®å®è¡ Kubernetesã®Ingressãå©çšããŠå€éšå
¬éãããæšè«APIãå®è¡ã§ããŸãã ãŸãã以äžã®ã³ãã³ãã§ollamaã®Ingressãååšããã確èªããŸããIngressãšollamaæ¥ç¶çšã®ãã¹ãåã¯Open WebUIã®ã€ã³ã¹ããŒã«æã«èšå®ãããã®ã§ãã $ kubectl get ingress -n open-webui-system | grep ollama # åºåäŸ open-webui-ollama traefik <ollamaæ¥ç¶çšã®ãã¹ãå> 80 13d äœæ¥çšç«¯æ«ãããIngressçµç±ã§ãæšè«APIãåŒã³åºããŸãã $ curl -sk <ollamaæ¥ç¶çšã®ãã¹ãå>/api/chat -d '{"model":"gemma4:12b","messages":[{"role":"user","content":"ããã«ã¡ã¯ãäžèšã§èªå·±ç޹ä»ããŠãã ããã"}],"stream":false,"think":false}' | python3 -c 'import sys,json; d=json.load(sys.stdin); print("model:", d["model"]); print(d["message"]["content"])' | jq . # åºåäŸ { "model": "gemma4:12b", "created_at": "2026-11-02T03:20:41.044425426Z", "message": { "role": "assistant", "content": "ç§ã¯Google DeepMindã«ãã£ãŠéçºããããããã¹ããšç»åãçè§£ããå€§èŠæš¡èšèªã¢ãã«ãGemma 4ãã§ãã" }, "done": true, "done_reason": "stop", "total_duration": 1638960978, "load_duration": 682073257, "prompt_eval_count": 22, "prompt_eval_duration": 177826000, "eval_count": 25, "eval_duration": 757298000 } Ingress ãçµç±ããŠæ£åžžã«å¿çãè¿ã£ãŠããããšã確èªã§ããŸããã ãŸããä»åã¯çŽåã®ãªã¯ãšã¹ãã«ãã£ãŠã¢ãã«ããã§ã« GPU ã¡ã¢ãªäžã«ããŒããããŠãããããåããŒããçºçãããå
šäœã§çŽ1.6ç§ãšããéåžžã«é«éãªã¬ã¹ãã³ã¹ãå®çŸã§ããŠããŸãã ãããã« æ¬èšäºã§ã¯ãSUSE AI Factoryã§å©çšã§ããæšè«ãšã³ãžã³ãOllamaãã®ä»çµã¿ã解説ããAirGapïŒå®å
šéåç¶²ïŒç°å¢ã§ã®å°å
¥æé ããæšè«ãã¢ãŸã§ã玹ä»ããŸããã Ollamaã¯ãéååã¢ãã«ã®ãµããŒããšèªåçãªã¡ã¢ãªç®¡çã«ãããéããããªãœãŒã¹ã§ãæè»œã«ããŒã«ã«LLMãåãããç¹ã倧ããªåŒ·ã¿ã§ãã ä»åŸã®èšäºã§ã¯ãæšè«ãšã³ãžã³ã®1ã€ã§ããvLLMã«ã€ããŠç޹ä»ããŸããæåŸãŸã§ãèªã¿ããã ããããããšãããããŸããã åè SUSE AI Factory Applications – Ollama Deploying SUSE AI Factory in air-gapped environments – Workflow Ollama Documentation Ollama Github Repository ã芧ããã ãããããšãããããŸãïŒ ãã®æçš¿ã¯ã圹ã«ç«ã¡ãŸãããïŒ åœ¹ã«ç«ã£ã 圹ã«ç«ããªãã£ã 0人ããã®æçš¿ã¯åœ¹ã«ç«ã£ããšèšã£ãŠããŸãã The post SUSE AI Factoryã§å§ããããŒã«ã«LLMãµãŒãã³ã°è§£èª¬ ãOllamaã®ä»çµã¿ãšã¢ãã«é
çœ®ã»æšè«APIå®è¡ãŸã§ã first appeared on SIOS Tech Lab .