RK3588+RK1828多模态AI问答机器人性能实测 二维码
发表时间:2026-08-10 16:30 开发一款多模态机器人,用时下的RK3588主板非常合适,定昌RK3588板卡(DC_EN588)支持RK182X算力卡,可拓展算力至26TOPS,支持Qwen2.5-3B、Qwen3-VL-2B、Qwen2.5-VL-7B、Qwen3-8B等模型。满足多模态机器人的问答功能开发需求。 一:硬件平台+固件 1)RK3588板卡(DC_EN588) 2) RK182X算力卡 ![]() 二:问答机器人产品特点 这是我们基于 RK1828 的端侧大模型体验页。模型在板子上跑,您手机连同一 Wi‑Fi 打开页面就能问。可以打字、说话,也能传图;需要的话旁边数字人会跟着念答案——全程私有部署,适合政府、园区、工位助手这类不能上云的场景。
支持的模型多 ![]() 测试代码: #!/usr/bin/env python3 import json, time, subprocess, urllib.request, os MODELS = ["Qwen2.5-3B", "Qwen3-VL-2B", "Qwen2.5-VL-7B", "Qwen3-8B"] BASE = "http://127.0.0.1:8080" PROMPT = "请用大约80个汉字介绍RK3588芯片的主要特点和典型应用场景。" MAX_TOKENS = 128 RUNS = 2 def http_json(url, data=None, timeout=300): req = urllib.request.Request(url, method="GET" if data is None else "POST") if data is not None: body = json.dumps(data).encode() req.add_header("Content-Type", "application/json") req.data = body with urllib.request.urlopen(req, timeout=timeout) as r: return json.loads(r.read().decode()) def wait_model(timeout=240): t0 = time.time() while time.time() - t0 < timeout: try: j = http_json(BASE + "/v1/models", timeout=3) data = j.get("data") or [] if data: return data[0].get("id", ""), time.time() - t0 except Exception: pass time.sleep(2) return None, time.time() - t0 def switch_model(name): script = "/userdata/models/%s/switch_to.sh" % name p = subprocess.run( "echo 123456 | sudo -S bash %s" % script, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, timeout=120) return p.returncode, (p.stdout or "")[-400:] def chat(max_tokens=MAX_TOKENS): t0 = time.time() j = http_json(BASE + "/v1/chat/completions", { "messages": [{"role": "user", "content": PROMPT}], "max_tokens": max_tokens, "temperature": 0.1, "stream": False, }, timeout=300) wall = time.time() - t0 usage = j.get("usage") or {} timings = j.get("timings") or {} content = ((j.get("choices") or [{}])[0].get("message") or {}).get("content") or "" return { "wall_s": round(wall, 3), "prompt_tokens": usage.get("prompt_tokens"), "completion_tokens": usage.get("completion_tokens"), "prompt_tok_s": round(timings.get("prompt_per_second") or 0, 2), "gen_tok_s": round(timings.get("predicted_per_second") or 0, 2), "prompt_ms": round(timings.get("prompt_ms") or 0, 1), "gen_ms": round(timings.get("predicted_ms") or 0, 1), "reply_preview": content.replace("\n", " ")[:100], "model_id": j.get("model"), } def model_size_gb(name): p = "/userdata/models/%s" % name out = subprocess.check_output(["du", "-sbL", p], text=True).split()[0] return round(int(out) / (1024 ** 3), 2) results = [] for name in MODELS: print("\n===== %s =====" % name, flush=True) row = {"name": name, "size_gb": model_size_gb(name), "type": "VLM" if "VL" in name else "LLM"} t_sw = time.time() rc, out = switch_model(name) mid, load_wait = wait_model(240) row["load_s"] = round(time.time() - t_sw, 1) row["load_wait_s"] = round(load_wait, 1) row["model_id"] = mid row["switch_rc"] = rc print("loaded id=%s load_s=%.1f" % (mid, row["load_s"]), flush=True) if not mid: row["error"] = "load timeout" results.append(row) continue try: chat(32) except Exception as e: row["error"] = "warmup failed: %s" % e results.append(row) continue runs = [] for i in range(RUNS): try: r = chat(MAX_TOKENS) runs.append(r) print(" run%d: gen=%.2f tok/s prompt=%.2f tok/s wall=%.3fs n=%s" % ( i + 1, r["gen_tok_s"], r["prompt_tok_s"], r["wall_s"], r["completion_tokens"]), flush=True) except Exception as e: print(" run%d err: %s" % (i + 1, e), flush=True) if runs: row["gen_tok_s_avg"] = round(sum(r["gen_tok_s"] for r in runs) / len(runs), 2) row["prompt_tok_s_avg"] = round(sum(r["prompt_tok_s"] for r in runs) / len(runs), 2) row["wall_s_avg"] = round(sum(r["wall_s"] for r in runs) / len(runs), 3) row["completion_tokens_avg"] = round(sum((r["completion_tokens"] or 0) for r in runs) / len(runs), 1) row["prompt_tokens"] = runs[0]["prompt_tokens"] row["reply_preview"] = runs[-1]["reply_preview"] row["runs"] = runs results.append(row)print("\n===== SUMMARY_JSON =====")print(json.dumps(results, ensure_ascii=False, indent=2)) ![]() 这个模型怎么选呢 要快 / 多模态 → Qwen3-VL-2B 纯文本、Prefill 敏感 → Qwen2.5-3B 能力更强的多模态 → Qwen2.5-VL-7B 最大文本(含思考链,首段会慢)→ Qwen3-8B 四:源码分析 浏览器 (局域网 :5000) │ SSE /query、上传图、ASR、设置 ▼ Flask app.py ──openai──► rkllm3-server :8080 ──► RK182x NPU │ ▲ │ │ switch_to.sh 改软链后 systemctl restart │ │ ├─ TTS 队列 (edge-tts → espeak 回退 → ffplay) └─ Unix DGRAM /tmp/dh_ipc.sock ──► digital_man.service(可选) 两套 systemd 服务: rkllm3.service 依赖 rknn3.service,跑 /userdata/models/rkllm3_server.sh → 当前模型的 run.sh → rkllm3-server web.service python3 /userdata/web/app.py --webbrowser,配 PulseAudio/TTS 环境,root 跑 对以上RK3588+RK182X算力卡开发智能问答机器人感兴趣的,欢迎给我们致电或在线留言,另外我们还有多款算力板卡可供挑选,涵盖高中低算力,欢迎进一步咨询了解。 声明:此文为广州定昌电子小编辛苦码字原创编辑,部分素材来源于自家工厂及合作客户,网络分享,如有权利声明或内容有误,欢迎联系小编处理或更正(邮箱:91hui@163.com),欢迎你转载,务必请标明出处链接:https://www.gzdcsmt.com/sys-nd/4303.html
|
你的姓名 * 你的联系方式 * 你的公司名称 补充说明 提交 |