Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions builder/deploy/deployer.go
Original file line number Diff line number Diff line change
Expand Up @@ -731,14 +731,17 @@ func (d *deployer) UpdateDeploy(ctx context.Context, dur *types.DeployUpdateReq,
deploy.EngineArgs = *dur.EngineArgs
}

if dur.Entrypoint != nil {
if deploy.RuntimeFramework == string(types.LlamaCpp) {
newVarStr, err := buildVariables(dur)
if isGGUFRuntime(deploy.RuntimeFramework) {
if dur.Entrypoint != nil {
newVarStr, err := buildVariables(deploy.Variables, dur)
if err != nil {
return fmt.Errorf("build variables for llama cpp error: %w", err)
}
dur.Variables = &newVarStr
}
if !hasGGUFEntryPoint(dur.Variables, deploy.Variables) {
return fmt.Errorf("entrypoint is required for llama.cpp or ktransformers")
}
}

if dur.Variables != nil {
Expand All @@ -761,8 +764,13 @@ func (d *deployer) UpdateDeploy(ctx context.Context, dur *types.DeployUpdateReq,
return nil
}

func buildVariables(dur *types.DeployUpdateReq) (string, error) {
varStr := ""
func isGGUFRuntime(runtimeFramework string) bool {
name := strings.ToLower(runtimeFramework)
return strings.Contains(name, string(types.LlamaCpp)) || strings.Contains(name, string(types.Ktransformers))
}

func buildVariables(existingVariables string, dur *types.DeployUpdateReq) (string, error) {
varStr := existingVariables
if dur.Variables != nil {
varStr = *dur.Variables
}
Expand All @@ -779,6 +787,18 @@ func buildVariables(dur *types.DeployUpdateReq) (string, error) {
return varStr, nil
}

func hasGGUFEntryPoint(variables *string, existingVariables string) bool {
varStr := existingVariables
if variables != nil {
varStr = *variables
}
varMap, err := hubcom.JsonStrToMap(varStr)
if err != nil {
return false
}
return strings.TrimSpace(varMap[types.GGUFEntryPoint]) != ""
}

func (d *deployer) StartDeploy(ctx context.Context, deploy *database.Deploy) error {
deploy.Status = common.Pending
// update deploy table
Expand Down
2 changes: 1 addition & 1 deletion component/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -1216,7 +1216,7 @@ func (c *modelComponentImpl) Wakeup(ctx context.Context, namespace, name string,

func (c *modelComponentImpl) buildVariables(req types.ModelRunReq, frame *database.RuntimeFramework) (string, error) {
engineName := strings.ToLower(frame.FrameName)
if engineName == string(types.LlamaCpp) || engineName == string(types.Ktransformers) {
if strings.Contains(engineName, string(types.LlamaCpp)) || strings.Contains(engineName, string(types.Ktransformers)) {
//check entrypoint for llama.cpp
if len(req.Entrypoint) < 1 {
err := fmt.Errorf("entrypoint is required for llama.cpp or ktransformers")
Expand Down
157 changes: 157 additions & 0 deletions configs/inference/amd-llama.cpp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
{
"engine_name": "amd-llama.cpp",
"enabled": 1,
"model_format": "gguf",
"container_port": 8000,
"description": "llama.cpp OpenAI-compatible GGUF text generation service for ROCm",
"engine_images": [
{
"compute_type": "gpu",
"image": "opencsghq/llama.cpp-rocm:rocm7.2.2-b9787",
"driver_version": "7.2.2",
"engine_version": "b9787"
}
],
"engine_args": [
{ "name": "ctx-size", "value": "8192", "format": "-c %s" },
{ "name": "parallel", "value": "1", "format": "-np %s" },
{ "name": "batch-size", "value": "2048", "format": "-b %s" },
{ "name": "predict", "value": "-1", "format": "-n %s" },
{ "name": "threads", "value": "-1", "format": "-t %s" },
{ "name": "gpu-layers", "value": "-1", "format": "-ngl %s" },
{ "name": "custom-options", "value": "", "format": "%s" }
],
"supported_archs": [
"llama",
"llama4",
"deci",
"falcon",
"baichuan",
"grok",
"gpt2",
"gptj",
"gptneox",
"mpt",
"starcoder",
"refact",
"bert",
"modern-bert",
"nomic-bert",
"nomic-bert-moe",
"neo-bert",
"jina-bert-v2",
"jina-bert-v3",
"eurobert",
"bloom",
"stablelm",
"qwen",
"qwen2",
"qwen2moe",
"qwen2vl",
"qwen3",
"qwen3moe",
"qwen3next",
"qwen3vl",
"qwen3vlmoe",
"qwen35",
"qwen35moe",
"phi2",
"phi3",
"phimoe",
"plamo",
"plamo2",
"plamo3",
"codeshell",
"orion",
"internlm2",
"minicpm",
"minicpm3",
"gemma",
"gemma2",
"gemma3",
"gemma3n",
"gemma4",
"gemma4-assistant",
"gemma-embedding",
"starcoder2",
"rwkv6",
"rwkv6qwen2",
"rwkv7",
"arwkv7",
"mamba",
"mamba2",
"jamba",
"xverse",
"command-r",
"cohere2",
"cohere2moe",
"dbrx",
"olmo",
"olmo2",
"olmoe",
"openelm",
"arctic",
"deepseek",
"deepseek2",
"deepseek2-ocr",
"deepseek32",
"chatglm",
"glm4",
"glm4moe",
"glm-dsa",
"bitnet",
"t5",
"t5encoder",
"jais",
"jais2",
"nemotron",
"nemotron_h",
"nemotron_h_moe",
"exaone",
"exaone4",
"exaone-moe",
"granite",
"granitemoe",
"granitehybrid",
"chameleon",
"wavtokenizer-dec",
"plm",
"bailingmoe",
"bailingmoe2",
"dots1",
"arcee",
"afmoe",
"ernie4_5",
"ernie4_5-moe",
"falcon-h1",
"hunyuan-moe",
"hunyuan-dense",
"hunyuan_vl",
"smollm3",
"gpt-oss",
"lfm2",
"lfm2moe",
"dream",
"smallthinker",
"llada",
"llada-moe",
"seed_oss",
"grovemoe",
"apertus",
"minimax-m2",
"cogvlm",
"rnd1",
"pangu-embedded",
"mistral3",
"eagle3",
"mistral4",
"paddleocr",
"mimo2",
"step35",
"llama-embed",
"maincoder",
"kimi-linear",
"talkie",
"mellum"
]
}
90 changes: 74 additions & 16 deletions configs/inference/llama.cpp.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,14 @@
"engine_images": [
{
"compute_type": "gpu",
"image": "opencsghq/llama.cpp:b5215",
"image": "opencsghq/llama.cpp:b9787",
"driver_version": "12.4",
"engine_version": "b5215"
},
{
"compute_type": "gpu",
"image": "opencsghq/llama.cpp:b5215-cu121",
"driver_version": "12.1",
"engine_version": "b5215"
"engine_version": "b9787"
},
{
"compute_type": "cpu",
"image": "opencsghq/llama.cpp:b5215-cpu",
"engine_version": "b5215"
"image": "opencsghq/llama.cpp:b9787-cpu",
"engine_version": "b9787"
}
],
"engine_args": [
Expand All @@ -36,18 +30,22 @@
"llama4",
"deci",
"falcon",
"baichuan",
"grok",
"gpt2",
"gptj",
"gptneox",
"mpt",
"baichuan",
"starcoder",
"refact",
"bert",
"modern-bert",
"nomic-bert",
"nomic-bert-moe",
"neo-bert",
"jina-bert-v2",
"jina-bert-v3",
"eurobert",
"bloom",
"stablelm",
"qwen",
Expand All @@ -56,10 +54,17 @@
"qwen2vl",
"qwen3",
"qwen3moe",
"qwen3next",
"qwen3vl",
"qwen3vlmoe",
"qwen35",
"qwen35moe",
"phi2",
"phi3",
"phimoe",
"plamo",
"plamo2",
"plamo3",
"codeshell",
"orion",
"internlm2",
Expand All @@ -68,11 +73,22 @@
"gemma",
"gemma2",
"gemma3",
"gemma3n",
"gemma4",
"gemma4-assistant",
"gemma-embedding",
"starcoder2",
"rwkv6",
"rwkv6qwen2",
"rwkv7",
"arwkv7",
"mamba",
"mamba2",
"jamba",
"xverse",
"command-r",
"cohere2",
"cohere2moe",
"dbrx",
"olmo",
"olmo2",
Expand All @@ -81,23 +97,65 @@
"arctic",
"deepseek",
"deepseek2",
"deepseek2-ocr",
"deepseek32",
"chatglm",
"glm4",
"glm4moe",
"glm-dsa",
"bitnet",
"t5",
"t5encoder",
"jais",
"jais2",
"nemotron",
"nemotron_h",
"nemotron_h_moe",
"exaone",
"rwkv6",
"rwkv6qwen2",
"rwkv7",
"arwkv7",
"exaone4",
"exaone-moe",
"granite",
"granitemoe",
"granitehybrid",
"chameleon",
"wavtokenizer-dec",
"plm",
"bailingmoe"
"bailingmoe",
"bailingmoe2",
"dots1",
"arcee",
"afmoe",
"ernie4_5",
"ernie4_5-moe",
"falcon-h1",
"hunyuan-moe",
"hunyuan-dense",
"hunyuan_vl",
"smollm3",
"gpt-oss",
"lfm2",
"lfm2moe",
"dream",
"smallthinker",
"llada",
"llada-moe",
"seed_oss",
"grovemoe",
"apertus",
"minimax-m2",
"cogvlm",
"rnd1",
"pangu-embedded",
"mistral3",
"eagle3",
"mistral4",
"paddleocr",
"mimo2",
"step35",
"llama-embed",
"maincoder",
"kimi-linear",
"talkie",
"mellum"
]
}
Loading
Loading