戰(zhàn)指南:用 Flask/Gradio 在 RK 板卡上搭建 OpenAI 兼容的大模型推理服務(wù))
大模型本地部署推理引擎模型量化嵌入式【免費(fèi)下載鏈接】rknn-llm項(xiàng)目地址https://gitcode.com/gh_mirrors/rk/rknn-llm點(diǎn)擊查看免費(fèi)下載導(dǎo)讀本文聚焦 rknn-llm 倉(cāng)庫(kù)中的examples/rkllm_server_demo示例講解如何將轉(zhuǎn)換好的 RKLLM 模型部署為可對(duì)外服務(wù)的網(wǎng)絡(luò)服務(wù)一套是基于 Flask 的OpenAI 兼容 HTTP API支持流式輸出與 Function Calling 工具調(diào)用另一套是基于 Gradio 的瀏覽器聊天界面。讀完本文你將掌握完整的部署命令、參數(shù)含義、HTTP 調(diào)用方式與函數(shù)調(diào)用實(shí)現(xiàn)并理解從 HTTP 請(qǐng)求到 NPU 推理的底層調(diào)用鏈。一、運(yùn)行前的準(zhǔn)備在啟動(dòng)任何服務(wù)之前需要完成兩件事參見(jiàn) examples/rkllm_server_demo/README.md準(zhǔn)備好已轉(zhuǎn)換的 RKLLM 模型文件即通過(guò) rkllm-toolkit 轉(zhuǎn)換得到的.rkllm模型需要拷貝到 Linux 板卡上并記錄其板卡上的絕對(duì)路徑。確認(rèn)板卡 IP在板卡上執(zhí)行ifconfig命令查看 IP 地址后續(xù)客戶(hù)端與服務(wù)端通信、瀏覽器訪問(wèn)都要用到它。此外倉(cāng)庫(kù)為 RK3588、RK3576、RK3562、RV1126B 提供了頻率鎖定腳本scripts 下的fix_freq_rk*.sh部署腳本會(huì)自動(dòng)將其拷貝到板卡并執(zhí)行。二、一鍵構(gòu)建與部署示例目錄下提供了兩個(gè)自動(dòng)化部署腳本均通過(guò)ADB完成板卡依賴(lài)安裝、文件推送與服務(wù)啟動(dòng)腳本服務(wù)類(lèi)型說(shuō)明build_rkllm_server_flask.shFlask 服務(wù)提供 OpenAI 兼容 API面向程序化調(diào)用build_rkllm_server_gradio.shGradio 服務(wù)提供網(wǎng)頁(yè)聊天 UI面向人機(jī)交互2.1 Flask ServerOpenAI 兼容 API# Usage: ./build_rkllm_server_flask.sh --workshop [Working Path] --model_path [Absolute Path of RKLLM Model on Board] --platform [Target Platform: rk3588/rk3576] [--lora_model_path [Lora Model Path]] [--prompt_cache_path [Prompt Cache File Path]] [--adb_device [ADB Device Serial]] ./build_rkllm_server_flask.sh --workshop /userdata --model_path /userdata/model.rkllm --platform rk3588 --adb_device 1234567890abcdef啟動(dòng)成功后Flask 服務(wù)默認(rèn)監(jiān)聽(tīng)0.0.0.0:8080見(jiàn) flask_server.py 中的app.run(host0.0.0.0, port8080, threadedFalse, debugFalse)對(duì)外提供兩個(gè) OpenAI 兼容端點(diǎn)EndpointMethodDescription/v1/modelsGET列出可用模型/v1/chat/completionsPOST聊天補(bǔ)全支持流式與非流式2.2 Gradio ServerWeb UI# Usage: ./build_rkllm_server_gradio.sh --workshop [Working Path] --model_path [Absolute Path of RKLLM Model on Board] --platform [Target Platform: rk3588/rk3576] [--lora_model_path [Lora Model Path]] [--prompt_cache_path [Prompt Cache File Path]] [--adb_device [ADB Device Serial]] ./build_rkllm_server_gradio.sh --workshop /userdata --model_path /userdata/model.rkllm --platform rk3588 --adb_device 1234567890abcdef部署完成后在瀏覽器中打開(kāi)http://board-ip:8080即可進(jìn)入 Gradio 聊天界面。2.3 命令行參數(shù)詳解兩個(gè)腳本的參數(shù)完全一致含義如下參數(shù)必選含義--workshop是板卡上的工作目錄服務(wù)文件會(huì)被推送到該目錄下--model_path是RKLLM 模型在板卡上的絕對(duì)路徑--platform是目標(biāo)平臺(tái)rk3588/rk3576腳本同時(shí)兼容 rv1126b、rk3562--lora_model_path否LoRA 模型在板卡上的絕對(duì)路徑--prompt_cache_path否Prompt Cache 文件的絕對(duì)路徑--adb_device否ADB 設(shè)備序列號(hào)多設(shè)備連接時(shí)用于指定目標(biāo)設(shè)備--help否打印幫助信息2.4 部署腳本內(nèi)部做了什么以 build_rkllm_server_flask.sh 為例腳本分為三個(gè)階段依賴(lài)檢查與安裝通過(guò) ADB 進(jìn)入板卡 shell先pkill掉舊的flask_server.py/gradio_server.py進(jìn)程隨后檢查pip3是否存在不存在則apt install python3-pip再檢查 Flask 是否可用否則通過(guò)清華源安裝flask2.2.2與Werkzeug2.2.2Gradio 腳本則安裝gradio4.24.0并帶--break-system-packages選項(xiàng)。文件推送工作目錄不存在時(shí)自動(dòng)mkdir -p隨后將 rkllm-runtime 中的librkllmrt.so來(lái)自Linux/librkllm_api/aarch64/拷貝進(jìn)./rkllm_server/lib/把 scripts 下的fix_freq_rk3576.sh、fix_freq_rk3588.sh、fix_freq_rv1126b.sh、fix_freq_rk3562.sh一并拷入服務(wù)目錄最后整體adb push到板卡。啟動(dòng)服務(wù)拼裝啟動(dòng)命令python3 flask_server.py --rkllm_model_path MODEL_PATH --target_platform PLATFORM若傳入 LoRA 或 Prompt Cache 路徑則追加對(duì)應(yīng)參數(shù)再通過(guò) ADB shell 在板卡上后臺(tái)執(zhí)行。腳本中還注釋保留了export RKLLM_LOG_LEVEL2可用于調(diào)整運(yùn)行時(shí)日志級(jí)別。2.5 服務(wù)啟動(dòng)時(shí)的底層流程在板卡上直接執(zhí)行flask_server.py時(shí)flask_server.py啟動(dòng)序列依次為參數(shù)校驗(yàn)檢查--rkllm_model_path、--target_platform合法值rk3588/rk3576/rv1126b/rk3562以及可選的 LoRA / Prompt Cache 路徑是否真實(shí)存在鎖頻執(zhí)行sudo bash fix_freq_platform.sh將 CPU/NPU 頻率固定在高頻保證推理性能穩(wěn)定資源限制resource.setrlimit(resource.RLIMIT_NOFILE, (102400, 102400))提高進(jìn)程可打開(kāi)文件數(shù)上限模型初始化通過(guò)ctypes.CDLL(lib/librkllmrt.so)加載運(yùn)行時(shí)動(dòng)態(tài)庫(kù)并調(diào)用rkllm_init完成模型加載模型名取自模型文件主文件名os.path.basename(model_path).rsplit(., 1)[0]隨后展示在/v1/models返回中信號(hào)處理注冊(cè)SIGINT/SIGTERM處理器收到中斷信號(hào)時(shí)調(diào)用rkllm_model.release()底層即rkllm_destroy釋放模型資源后優(yōu)雅退出。三、Flask API 使用指南Flask 服務(wù)暴露的是 OpenAI 兼容的 HTTP API同時(shí)支持常規(guī)對(duì)話(huà)與 Function Calling工具調(diào)用。3.1 常規(guī)對(duì)話(huà)常規(guī)對(duì)話(huà)即標(biāo)準(zhǔn)的問(wèn)答交互客戶(hù)端發(fā)送消息服務(wù)端返回模型回復(fù)??焖匍_(kāi)始推薦使用RKLLMClient封裝類(lèi)最小代碼即可完成調(diào)用from chat_api_flask import RKLLMClient client RKLLMClient(base_urlhttp://x.x.x.x:8080) # 非流式 reply client.chat_simple(Hello, introduce yourself please.) print(reply) # 流式 for chunk in client.chat(messages[{role: user, content: Hello}], streamTrue): print(chunk[content], end, flushTrue)也可以直接運(yùn)行內(nèi)置的交互式演示chat_api_flask.py# 交互式對(duì)話(huà)Demo 1 python chat_api_flask.py --server http://board-ip:8080 # 關(guān)閉流式 python chat_api_flask.py --server http://board-ip:8080 --no-stream注意將board-ip替換為板卡實(shí)際 IP用ifconfig查看。交互式 demo 中支持輸入exit退出、clear清空歷史記錄并自動(dòng)維護(hù)完整的多輪消息歷史。手動(dòng) HTTP 調(diào)用如果需要自定義實(shí)現(xiàn)按以下步驟1) 設(shè)置服務(wù)器地址server_url http://x.x.x.x:8080/v1/chat/completions2) 創(chuàng)建會(huì)話(huà)import requests session requests.Session() session.keep_alive False adapter requests.adapters.HTTPAdapter(max_retries3) session.mount(https://, adapter) session.mount(http://, adapter)3) 構(gòu)造請(qǐng)求體data { model: rkllm, # 模型標(biāo)識(shí)可自定義 messages: [ {role: user, content: Hello} ], stream: False, # True 流式False 非流式 temperature: 0.8, # 采樣溫度默認(rèn)0.8 top_p: 0.9, # 核采樣閾值默認(rèn)0.9 top_k: 1, # Top-k 采樣默認(rèn)1 max_tokens: 4096, # 最大生成 token 數(shù)默認(rèn)4096 repeat_penalty: 1.1, # 重復(fù)懲罰默認(rèn)1.1 frequency_penalty: 0.0, # 頻率懲罰默認(rèn)0.0 presence_penalty: 0.0, # 存在懲罰默認(rèn)0.0 enable_thinking: False, # 是否啟用深度思考模式 }4) 發(fā)送請(qǐng)求headers {Content-Type: application/json, Authorization: not_required} resp session.post(server_url, jsondata, headersheaders, streamdata[stream])5) 解析響應(yīng)import json # 非流式 if resp.status_code 200: result resp.json() print(A:, result[choices][0][message][content]) else: print(Error:, resp.text) # 流式SSE if resp.status_code 200: for line in resp.iter_lines(decode_unicodeTrue): if line.startswith(data: ) and line[6:].strip() ! [DONE]: chunk json.loads(line[6:]) delta chunk[choices][0].get(delta, {}) if delta.get(content): print(delta[content], end, flushTrue)請(qǐng)求參數(shù)與采樣默認(rèn)值對(duì)照上述請(qǐng)求體中的采樣參數(shù)并非寫(xiě)死服務(wù)端會(huì)在 flask_server.py 中逐項(xiàng)讀取請(qǐng)求 JSON 并按默認(rèn)值兜底然后構(gòu)造成RKLLMSamplingParam與 rkllm.h 中定義的 C 結(jié)構(gòu)體一一對(duì)應(yīng)再在單次推理時(shí)注入。各參數(shù)對(duì)推理行為的影響temperature控制采樣的隨機(jī)性值越大輸出越發(fā)散top_p核采樣閾值只從累計(jì)概率達(dá)到該值的 token 集合中采樣top_k只從概率最高的 k 個(gè) token 中采樣max_tokens單次生成的最大新 token 數(shù)repeat_penalty/frequency_penalty/presence_penalty三種不同的重復(fù)/頻率抑制策略enable_thinking對(duì)應(yīng)底層RKLLMInput.enable_thinking字段為 True 時(shí)模型輸出思考過(guò)程。3.2 Function Calling工具調(diào)用注意本節(jié)以Qwen3系列模型為例。其他模型如 DeepSeek、LLaMA輸出的工具調(diào)用格式可能不同——請(qǐng)按需調(diào)整parse_tool_calls()。Function Calling 允許模型根據(jù)用戶(hù)請(qǐng)求自動(dòng)調(diào)用預(yù)定義函數(shù)從而獲取實(shí)時(shí)或精確的信息如天氣、計(jì)算。場(chǎng)景說(shuō)明以天氣查詢(xún)?yōu)槔脩?hù)問(wèn)舊金山今天和明天的氣溫是多少模型本身無(wú)法回答實(shí)時(shí)問(wèn)題但可以通過(guò)調(diào)用get_current_temperature和get_temperature_date兩個(gè)工具獲取準(zhǔn)確數(shù)據(jù)。快速開(kāi)始推薦from chat_api_flask import RKLLMClient, TOOLS, parse_tool_calls, execute_tool_calls client RKLLMClient(base_urlhttp://x.x.x.x:8080) messages [ {role: system, content: You are Qwen, created by Alibaba Cloud. You are a helpful assistant.\nCurrent Date: 2024-09-30}, {role: user, content: Whats the temperature in San Francisco now? How about tomorrow?}, ] # 步驟 1模型返回要調(diào)用哪些工具及參數(shù) resp client.chat(messagesmessages, toolsTOOLS, streamFalse) tool_calls parse_tool_calls(resp[choices][0][message][content]) # 步驟 2執(zhí)行工具調(diào)用并把結(jié)果追加到消息列表 assistant_msg, tool_msgs execute_tool_calls(tool_calls) messages.append(assistant_msg) messages.extend(tool_msgs) # 步驟 3模型根據(jù)工具結(jié)果綜合出最終回答 resp client.chat(messagesmessages, toolsNone, streamFalse) print(A:, resp[choices][0][message][content])運(yùn)行內(nèi)置函數(shù)調(diào)用 demopython chat_api_flask.py --server http://board-ip:8080 --demo 2手動(dòng) HTTP 調(diào)用1) 定義工具函數(shù)def get_current_temperature(location: str, unit: str celsius): return {temperature: 26.1, location: location, unit: unit} def get_temperature_date(location: str, date: str, unit: str celsius): return {temperature: 25.9, location: location, date: date, unit: unit} FUNCTION_MAP { get_current_temperature: get_current_temperature, get_temperature_date: get_temperature_date, }2) 定義工具描述OpenAI Function Calling 格式TOOLS [ { type: function, function: { name: get_current_temperature, description: Get current temperature at a location., parameters: { type: object, properties: { location: {type: string, description: City, State, Country}, unit: {type: string, enum: [celsius, fahrenheit]}, }, required: [location], }, }, }, { type: function, function: { name: get_temperature_date, description: Get temperature at a location and date., parameters: { type: object, properties: { location: {type: string, description: City, State, Country}, date: {type: string, description: YYYY-MM-DD}, unit: {type: string, enum: [celsius, fahrenheit]}, }, required: [location, date], }, }, }, ]3) 第一次調(diào)用模型返回工具調(diào)用指令messages [ {role: system, content: You are Qwen, created by Alibaba Cloud. You are a helpful assistant.\nCurrent Date: 2024-09-30}, {role: user, content: Whats the temperature in San Francisco now? How about tomorrow?}, ] data { model: rkllm, messages: messages, stream: False, tools: TOOLS, } resp session.post(server_url, jsondata, headersheaders) server_answer resp.json()[choices][0][message][content] # 模型輸出示例 # tool_call # {name: get_current_temperature, arguments: {location: San Francisco}} # /tool_call # tool_call # {name: get_temperature_date, arguments: {location: San Francisco, date: 2024-10-01}} # /tool_call4) 解析工具調(diào)用并執(zhí)行import re, json # 同時(shí)支持 JSON 與 XML-like 的 tool_call 格式 matches re.findall(rtool_call\s*(\{.*?\})\s*/tool_call, server_answer, re.DOTALL) tool_calls [json.loads(m) for m in matches] # 執(zhí)行函數(shù)并構(gòu)造消息 for tc in tool_calls: name, args tc[name], tc[arguments] result FUNCTION_MAPname messages.append({role: tool, name: name, content: json.dumps(result)})5) 第二次調(diào)用獲取最終回答data[messages] messages resp session.post(server_url, jsondata, headersheaders) print(A:, resp.json()[choices][0][message][content]) # 輸出示例 # A: The current temperature in San Francisco is 26.1°C. # Tomorrow, the temperature is expected to be 25.9°C.重要注意事項(xiàng)項(xiàng)目說(shuō)明模型兼容性該 demo 基于 Qwen3 系列。其他模型需調(diào)整parse_tool_calls()的正則以及tool_response_str參數(shù)工具調(diào)用格式Qwen3 輸出tool_call.../tool_call包裹的 JSONXML-like 格式functionxxxparameterxxx.../parameter/function同樣支持多工具結(jié)果合并多個(gè)工具結(jié)果會(huì)在發(fā)給模型前合并為 JSON 數(shù)組[{...}, {...}]模型能力能力較弱的模型如 Qwen3-0.6B可能無(wú)法返回準(zhǔn)確的工具調(diào)用參數(shù)系統(tǒng)提示詞系統(tǒng)提示詞模板是 Qwen 專(zhuān)屬的使用其他模型時(shí)需替換為對(duì)應(yīng)模板四、客戶(hù)端腳本腳本說(shuō)明chat_api_flask.py面向 Flask 服務(wù)的 OpenAI 兼容客戶(hù)端支持對(duì)話(huà) 函數(shù)調(diào)用chat_api_gradio.py面向 Gradio 服務(wù)的客戶(hù)端通過(guò) Gradio API 聊天chat_api_flask.py中的RKLLMClient封裝了GET /v1/models與POST /v1/chat/completions兩個(gè)調(diào)用內(nèi)部使用帶 3 次重試的requests.Sessionchat()方法在非流式時(shí)返回 OpenAI 風(fēng)格的字典流式時(shí)返回按data:前綴解析出的增量?jī)?nèi)容生成器parse_tool_calls()依次嘗試 JSON 與 XML-like 兩種工具調(diào)用格式execute_tool_calls()同時(shí)兼容{name:..., arguments:...}與 OpenAI 風(fēng)格{function: {...}}兩種輸入。五、底層原理從 HTTP 請(qǐng)求到 NPU 推理的調(diào)用鏈5.1 通過(guò) ctypes 直接綁定 C 運(yùn)行時(shí)兩個(gè)服務(wù)端都沒(méi)有依賴(lài)獨(dú)立的 Python 綁定庫(kù)而是用 Python 標(biāo)準(zhǔn)庫(kù)ctypes直接加載lib/librkllmrt.soflask_server.py并在 Python 側(cè)完整復(fù)刻了 rkllm.h 中定義的枚舉與結(jié)構(gòu)體包括輸入類(lèi)型枚舉RKLLMInputTypeRKLLM_INPUT_PROMPT文本提示、RKLLM_INPUT_TOKENtoken 序列、RKLLM_INPUT_EMBEDembedding 向量、RKLLM_INPUT_MULTIMODAL圖文多模態(tài)推理模式枚舉RKLLMInferModeRKLLM_INFER_GENERATE文本生成、RKLLM_INFER_GET_LAST_HIDDEN_LAYER取末層隱藏狀態(tài)、RKLLM_INFER_GET_LOGITS取 logits回調(diào)狀態(tài)枚舉LLMCallStateRKLLM_RUN_NORMAL/WAITING/FINISH/ERROR參數(shù)結(jié)構(gòu)體RKLLMParam、RKLLMExtendParam、RKLLMSamplingParam、RKLLMLoraAdapter、RKLLMInferParam、RKLLMResult等。RKLLM類(lèi)flask_server.py封裝了初始化、推理、釋放的全過(guò)程并暴露set_chat_template、set_function_tools、rkllm_load_lora、rkllm_load_prompt_cache等能力。5.2 默認(rèn)參數(shù)與 CPU 親和性RKLLM.__init__中設(shè)置了初始化默認(rèn)值flask_server.pymax_context_len 4096、max_new_tokens 4096top_k 1、top_p 0.9、temperature 0.8、repeat_penalty 1.1、frequency_penalty 0、presence_penalty 0skip_special_token True、ignore_eos_token False、is_async False擴(kuò)展參數(shù)embed_flash 1embedding 從 flash 查詢(xún)、n_batch 1、use_cross_attn 0、enabled_cpus_num 4CPU 親和性差異rk3576/rk3588平臺(tái)啟用 CPU4–CPU7大核掩碼(14)|(15)|(16)|(17)其他平臺(tái)啟用 CPU0–CPU3與rkllm.h中的CPU0~CPU7宏定義一一對(duì)應(yīng)。5.3 回調(diào)驅(qū)動(dòng)與流式輸出推理采用回調(diào)驅(qū)動(dòng)模式C 側(cè)每次生成一段文本就回調(diào) Python 側(cè)注冊(cè)的callback_implflask_server.pyPython 側(cè)把累積的文本存入全局global_text列表。generate_stream()在一個(gè)工作線(xiàn)程中執(zhí)行rkllm_run主線(xiàn)程循環(huán)輪詢(xún)global_text并逐段 yield由 Flask 的stream_with_context以 SSEtext/event-stream格式輸出每個(gè) chunk 遵循 OpenAI 流式協(xié)議先發(fā)帶role的首塊中間逐段發(fā)送delta.content最后以finish_reason: stop和data: [DONE]收尾flask_server.py。5.4 OpenAI 兼容響應(yīng)與并發(fā)控制非流式響應(yīng)由build_openai_response()構(gòu)造包含id、object: chat.completion、created、model、choices[0].message與usageprompt/completion tokens 數(shù)完全對(duì)齊 OpenAI 返回格式。服務(wù)端用一個(gè)全局threading.Lock加is_blocking標(biāo)志控制并發(fā)推理期間其他請(qǐng)求會(huì)收到 503RKLLM_Server is busy!響應(yīng)避免多用戶(hù)同時(shí)搶占 NPU 資源flask_server.py。5.5 多輪消息追蹤與多工具結(jié)果合并服務(wù)端通過(guò)全局_last_messages記錄上一次請(qǐng)求的消息列表用新消息 本次消息 - 上次消息的方式提取增量輸入get_last_input()flask_server.py。當(dāng)檢測(cè)到新一批連續(xù)tool角色消息時(shí)會(huì)將其內(nèi)容合并為 JSON 數(shù)組后一次性送入模型這與execute_tool_calls()中把多個(gè)工具結(jié)果合并為[{...}, {...}]的邏輯閉環(huán)支撐了多工具并行調(diào)用的場(chǎng)景。5.6 Gradio 服務(wù)的實(shí)現(xiàn)要點(diǎn)gradio_server.py 與 Flask 版共用同一套 ctypes 綁定代碼差異在于 UI 層它設(shè)置GRADIO_SERVER_NAME0.0.0.0、GRADIO_SERVER_PORT8080用gr.Blocks構(gòu)建包含gr.Chatbot、gr.Textbox、清空按鈕的聊天界面get_RKLLM_output()生成器在模型逐段輸出時(shí)實(shí)時(shí)追加到 assistant 消息實(shí)現(xiàn)打字機(jī)效果同時(shí)兼容新版[{role: ..., content: ...}]與舊版[[user, assistant], ...]兩種歷史記錄格式??蛻?hù)端 chat_api_gradio.py 則通過(guò)gradio_client.Client依次調(diào)用/get_user_input與/get_RKLLM_output兩個(gè)端點(diǎn)完成一輪問(wèn)答。六、小結(jié)與延伸部署鏈路轉(zhuǎn)換模型 → 推送到板卡 →build_rkllm_server_flask.sh或 Gradio 版一鍵安裝依賴(lài)、推送運(yùn)行時(shí)與啟動(dòng)服務(wù) → 瀏覽器或 HTTP 客戶(hù)端訪問(wèn):8080。兩套服務(wù)分工Flask 版面向程序化集成OpenAI 兼容、SSE 流式、Function CallingGradio 版面向快速演示與人工交互。性能前置條件服務(wù)啟動(dòng)時(shí)會(huì)執(zhí)行fix_freq_platform.sh鎖頻并依賴(lài) NPU 驅(qū)動(dòng)rknpu-driver確保在 RK3588/RK3576 等平臺(tái)上獲得穩(wěn)定的推理表現(xiàn)。可擴(kuò)展方向修改 flask_server.py 中的采樣默認(rèn)值或增加鑒權(quán)邏輯即可適配更多生產(chǎn)場(chǎng)景若要接入其他模型家族重點(diǎn)是替換系統(tǒng)提示詞模板并調(diào)整parse_tool_calls()的解析正則。贊分享大模型本地部署推理引擎模型量化嵌入式【免費(fèi)下載鏈接】rknn-llm項(xiàng)目地址https://gitcode.com/gh_mirrors/rk/rknn-llm點(diǎn)擊查看免費(fèi)下載相關(guān)推薦PaddleNLP 推理服務(wù)化快速上手基于 Flask Gradio 的動(dòng)態(tài)圖 OpenAI 兼容 API 部署實(shí)戰(zhàn)PaddleNLP 推理服務(wù)化快速上手基于 Flask Gradio 的動(dòng)態(tài)圖 OpenAI 兼容 API 部署實(shí)戰(zhàn) 導(dǎo)讀 本文圍繞 PaddleNLP人工智能大模型預(yù)訓(xùn)練微調(diào)LoRARLHF強(qiáng)化學(xué)習(xí)分布式訓(xùn)練模型推理服務(wù)推理引擎模型量化模型壓縮本地部署NLP產(chǎn)品管理工作流實(shí)戰(zhàn)指南Product-Management 插件把 Claude 變成你的專(zhuān)屬產(chǎn)品經(jīng)理產(chǎn)品管理工作流實(shí)戰(zhàn)指南Product Management 插件把 Claude 變成你的專(zhuān)屬產(chǎn)品經(jīng)理 從一個(gè)周五下午開(kāi)始 周五下午你要同時(shí)交出一份工程在等AI 技能AI 插件OpenCore Legacy Patcher實(shí)操指南在老款I(lǐng)ntel Mac上安裝最新macOSOpenCore Legacy Patcher實(shí)操指南在老款I(lǐng)ntel Mac上安裝最新macOS 如果一臺(tái)2012年的MacBook還留在High Sier操作系統(tǒng)固件驅(qū)動(dòng)開(kāi)發(fā)上一篇終極指南如何在墨水屏設(shè)備上打造流暢的Android啟動(dòng)器體驗(yàn)下一篇高效視頻下載利器yt-dlp-gui完整使用指南創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考