文心4.5开源模型部署实践

文心4.5开源模型部署实践

使用fastdeploy本地部署

执行命令:

python -m fastdeploy.entrypoints.openai.api_server \
 --model baidu/ERNIE-4.5-21B-A3B-Paddle \
 --port 8180 \
 --metrics-port 8181 \
 --engine-worker-queue-port 8182 \
 --max-model-len 32768 \
 --max-num-seqs 32

解释一下部署命令

该命令用于通过 FastDeploy 框架部署百度 ERNIE-4.5 大模型服务,并兼容 OpenAI API 协议。以下是参数详解:

1. ‌核心模块与模型

  • fastdeploy.entrypoints.openai.api_server:FastDeploy 提供的服务入口模块,用于启动兼容 OpenAI API 的 HTTP 服务‌12。
  • --model baidu/ERNIE-4.5-21B-A3B-Paddle:指定模型路径,此处为百度 ERNIE-4.5-21B 的 PaddlePaddle 格式模型,支持 210 亿参数规模‌23。

2. ‌端口配置

  • --port 8180:主服务监听端口,用于处理 API 请求(如文本生成、对话等)‌14。
  • --metrics-port 8181:监控指标端口,提供 Prometheus 格式的模型性能数据(如吞吐量、延迟)‌15。
  • --engine-worker-queue-port 8182:工作队列通信端口,协调多个推理引擎实例的任务分配‌15。

3. ‌性能与资源控制

  • --max-model-len 32768:限制模型单次处理的上下文最大长度(32K tokens),避免内存溢出‌14。
  • --max-num-seqs 32:设置批量处理的最大序列数,平衡并发性能与显存占用‌15。

4. ‌技术背景

  • FastDeploy‌:百度推出的高效推理框架,支持多硬件后端(如 GPU、NPU),优化了 PaddlePaddle 模型的部署效率‌23。
  • ERNIE-4.5‌:百度最新大语言模型,在代码生成、逻辑推理等任务上表现优异,需通过此类服务化部署提供 API 调用能力‌23。

5. ‌典型应用场景

  • 企业级 AI 中台:通过标准化 OpenAI API 协议集成到现有系统‌16。
  • 高并发推理:利用多端口设计实现负载均衡与监控‌15。
  • 长文本处理:32K 上下文窗口适合文档摘要、代码分析等任务‌34。

最近在实际工程中,发现32K上下文窗口实在太小了。怎么也要64K才好工作。

使用fastdeploy在星河社区部署

进入部署页面:飞桨AI Studio星河社区-人工智能学习与实训社区

点击:新建部署

部署内部模型

在热门模型库里,选FastDeploy推理框架,然后选文心4.5模型即可。

比如这里选了21B模型。

部署完毕,点“详情”,会提供api调用的测试代码,直接在python里调用即可。

这个模型来自:ERNIE-4.5-21B-A3B-Paddle_文心大模型_大语言模型_文本生成-飞桨AI Studio星河社区

我在部署了21B模型后,使用Auto-Coder工具构建一个项目进行了测试,这个21B模型还是挺厉害的,正好处于几乎符合Auto-Coder工具要求的那一档,也就是略低于DeepSeek-v3模型,但是勉强能用。

但是由于只能提供32k的上下文,这个限制较大,导致无法在Auto-Coder中真实的使用。

部署外部模型(其实是用ollam部署)

选择:外部部署,把部署链接cp过去

先尝试了部署最大的模型:baidu/ERNIE-4.5-300B-A47B-PT · HF Mirror

部署失败

再尝试部署这个:

https://huggingface.cn/baidu/ERNIE-4.5-300B-A47B-W4A8C8-TP4-Paddle

还是失败。证明300B的模型在星河是无法部署成功的。

也就是只有21B和28B等较小的模型才能部署成功。

星河官方已经设好了21B模型的部署,直接点一下就可以了。这里我们再从外部huggingface引入部署实践一下: 

使用这个模型

https://huggingface.co/baidu/ERNIE-4.5-21B-A3B-Base-Paddle

失败,再用这个试试

https://huggingface.co/baidu/ERNIE-4.5-21B-A3B-Base-PT

还是失败 

测试了半天,才发现这行小字:

说明:平台暂仅支持GGUF格式且不大于70B的公开模型部署,请遵守平台规范(禁止涉黄、暴力等违规信息)

所以只要大于70B,且不是GGUF格式的,都不能部署。新发布的文心模型,还都没有GGUF格式,所以都还不行。

有空再使用GGUF格式模型试试

在星河社区,看模型配置

{
  "architectures": [
    "Ernie4_5_MoeForCausalLM"
  ],
  "bos_token_id": 1,
  "eos_token_id": 2,
  "hidden_act": "silu",
  "hidden_size": 2560,
  "intermediate_size": 12288,
  "max_position_embeddings": 131072,
  "model_type": "ernie4_5_moe",
  "num_attention_heads": 20,
  "num_key_value_heads": 4,
  "num_hidden_layers": 28,
  "pad_token_id": 0,
  "rms_norm_eps": 1e-05,
  "use_cache": false,
  "vocab_size": 103424,
  "rope_theta": 500000,
  "use_rmsnorm": true,
  "tie_word_embeddings": true,
  "use_bias": false,
  "moe_num_experts": 64,
  "moe_num_shared_experts": 2,
  "moe_layer_start_index": 1,
  "moe_intermediate_size": 1536,
  "moe_capacity": [64,64,64],
  "moe_gate": "topk",
  "moe_k": 6,
  "moe_layer_interval": 1,
  "moe_use_aux_free": true,
  "dtype": "bfloat16",
  "num_nextn_predict_layers": 1,
  "multi_token_pred_lambda": 0.3
}

这证明它是支持128K长文本的,那为什么使用中最大是32K呢?出现了这个报错:

  File "/home/skywalk/minipy312/lib/python3.12/site-packages/openai/_base_client.py", line 1037, in request
    raise self._make_status_error_from_response(err.response) from None
openai.BadRequestError: Error code: 400 - {'object': 'error', 'message': 'Input text is too long, input_ids_len (32767) + min_tokens(1) >= max_model_len(32768)', 'code': 400}
╭────────────────────────────────────────────────── 🔥 System Error ───────────────────────────────────────────────────╮
│ FATAL ERROR:                                                                                                         │
│ Error code: 400 - {'object': 'error', 'message': 'Input text is too long, input_ids_len (32767) + min_tokens(1) >=   │
│ max_model_len(32768)', 'code': 400}                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
──────────────────────────────────────────────── Agentic Edit Finished ─────────────────────────────────────────────────
An error occurred: BadRequestError - Error code: 400 - {'object': 'error', 'message': 'Input text is too long, input_ids_len (32767) + min_tokens(1) >= max_model_len(32768)', 'code': 400}

不知道是模型设置了32K的上下文限制,还是Auto-Coder的拆分出了问题。

找到了,默认设置是51200

/conf conversation_prune_safe_zone_tokens:51200

把它设置为

/conf conversation_prune_safe_zone_tokens:32767试试

测试glm4试试

https://hf-mirror.com/unsloth/GLM-4-32B-0414-GGUF
https://huggingface.co/unsloth/GLM-4-32B-0414-GGUF

部署成功! 

不过在Auto-Coder里面一直刷,有些问题

coding@auto-coder.chat:~$ 继续
Successfully set configuration: event_file =
/home/skywalk/work/autocoder/.auto-coder/events/05ee5870-bcca-4f8f-b6a2-a10adb1fca8f_20250702-114604.jsonl
─────────────────────────────────────────── Starting Agentic Edit: autocoder ───────────────────────────────────────────
╭───────────────────────────────────────────────────── Objective ──────────────────────────────────────────────────────╮
│ User Query:                                                                                                          │
│ 继续                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Conversation ID: 8c63e814-a349-414c-92e6-7be661ed09d3
当前会话总 tokens: 34624
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 34652
当前会话总 tokens: 34720
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 34749
当前会话总 tokens: 34817
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 34846
当前会话总 tokens: 34914
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 34943
当前会话总 tokens: 35011
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35040
当前会话总 tokens: 35108
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35137
当前会话总 tokens: 35205
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35234
当前会话总 tokens: 35302
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35331
当前会话总 tokens: 35399
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35428
当前会话总 tokens: 35496
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35525
当前会话总 tokens: 35593
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG当前会话总 tokens: 35622
当前会话总 tokens: 35690

<think>好的,我现在需要帮用户解决在JDK1.8环境中集成大模型对话功能的问题。首先,用户提到的是JDK1.8,这意味着可能使用的是较旧的Java版本,需要注意兼容性。用户之前的问题可能涉及到Spring Boot和LangChain4j,但这次他们直接提到JDK1.8,可能希望不依赖框架,或者使用更基础的方法。我需要先确定用户的具体需求。他们想接入大模型对话功能,比如调用像GPT-3、ChatGPT或者其他开源模型如LLAMA的API。由于是JDK1.8环境,可能需要使用Java的HTTP客户端或者第三方库来发送请求和处理响应。不过JDK1.8自带的HTTP客户端是较旧的,可能需要使用ApacheHttpClient或OkHttp等第三方库。 接下来,我需要考虑如何在没有SpringBoot的情况下集成。可能需要手动处理HTTP请求,构造JSON数据,处理认证(如API密钥)。同时,用户可能需要一个示例代码,展示如何发送请求到例如OpenAI的API,并解析返回的对话结果。另外,用户可能关心依赖管理,比如使用Maven或Gradle添加必要的库。例如,Apache HttpClient、Jackson用于JSON处理,或者Google的Gson库。需要注意这些库是否兼容JDK1.8,因为有些新版本可能不再支持Java8。 还可能涉及异常处理、超时设置、异步请求等。用户可能需要一个简单的实现,或者更高效的处理方式。此外,如果用户希望使用本地部署大模型,可能需要集成Java的深度学习库,如DeepLearning4j,但这可能复杂度较高,不如调用API直接。 需要提醒用户关于API密钥的安全性,比如不要在代码中硬编码,而是使用环境变量或配置文件。同时,考虑网络问题,比如代理设置,特别是在企业环境中可能需要配置。 最后,生成相关问题,可能涉及如何优化性能、处理大模型的响应、安全措施等。确保回答结构清晰,步骤明确,代码示例正确,并符合用户的环境要求。</think>### 如何在JDK 1.8中集成大模型对话功能? #### 一、技术选型与实现路径 在JDK 1.8环境中集成大模型对话功能,建议采用以下两种方案: 1. **直接调用大模型API**:通过HTTP请求与云端大模型服务(如OpenAI、文心一言等)交互,无需本地部署模型 2. **本地模型集成**:使用支持Java的AI框架(如DeepLearning4j)加载开源大模型(如LLAMA、Alpaca等) #### 二、HTTP API调用方案(推荐) **实现步骤**: 1. **添加依赖**(Maven示例): ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.5</version> </dependency> ``` 2. **API调用示例**(以OpenAI为例): ```java import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import com.fasterxml.jackson.databind.ObjectMapper; public class OpenAIClient { private static final String API_URL = "https://api.openai.com/v1/chat/completions"; private static final String API_KEY = "your_api_key"; public String generateResponse(String prompt) throws Exception { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpPost httpPost = new HttpPost(API_URL); httpPost.setHeader("Content-Type", "application/json"); httpPost.setHeader("Authorization", "Bearer " + API_KEY); String jsonBody = String.format("{" + "\"model\": \"gpt-3.5-turbo\"," + "\"messages\": [{\"role\": \"user\", \"content\": \"%s\"}]" + "}", prompt); httpPost.setEntity(new StringEntity(jsonBody)); return httpClient.execute(httpPost, response -> { return new ObjectMapper().readTree(response.getEntity().getContent()) .path("choices").get(0).path("message").path("content").asText(); }); } } } ``` #### 三、本地模型集成方案(需性能优化) 1. **使用DeepLearning4j加载模型**: ```java import org.deeplearning4j.nn.modelimport.keras.KerasModelImport; import org.deeplearning4j.nn.multilayer.MultiLayerNetwork; public class LocalModel { private MultiLayerNetwork model; public void loadModel(String modelPath) throws Exception { model = KerasModelImport.importKerasSequentialModelAndWeights(modelPath); } public String predict(String input) { // 实现输入预处理和推理逻辑 return model.output(input).toString(); } } ``` #### 四、关键注意事项 1. **JDK 1.8兼容性**:确保使用的第三方库版本支持Java 8,例如: - Apache HttpClient 4.5.x - Jackson 2.12.x - DeepLearning4j 1.0.0-beta7[^1] 2. **性能优化**: - 使用连接池管理HTTP请求(推荐Apache HttpClient连接池) - 对大模型响应启用GZIP压缩 - 异步处理耗时操作(如使用CompletableFuture) 3. **安全实践**: - API密钥应通过环境变量或加密存储 - 输入内容需进行合法性校验 - 建议设置请求速率限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值