


















目标:Hadoop → Spark → 大模型轻量化 → 端侧部署 全流程Demo
实现上述目标 最简单、最易落地的场景是「文本分类轻量化部署」 —— 比如基于企业日志/客服文本,用 Hadoop 预处理数据、训练通用文本分类大模型,再轻量化压缩后部署到手机/嵌入式设备(端侧)做本地文本分类,这个场景覆盖全链路且技术门槛最低,无需复杂硬件和业务逻辑。
paddlepaddle>=2.5(CPU版本)、paddlenlp、paddlelite、pyspark。目标:准备「客服咨询文本 + 分类标签」的训练数据(比如「退款咨询」「物流咨询」「产品咨询」3 类)。
# 1. 本地创建简易数据集(text,label 格式)
echo -e "我的订单怎么还没发货,物流咨询\n申请退款多久到账,退款咨询\n产品保质期多久,产品咨询" > ./customer_service.csv
# 2. 上传到 HDFS
hadoop fs -mkdir -p /user/demo/data
hadoop fs -put ./customer_service.csv /user/demo/data/
【已搞定】《端侧大模型 Hadoop + Spark 配置方案》: https://www.cnblogs.com/renhui/p/19603327
编写 clean_data.py:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("DemoClean").master("yarn").getOrCreate()
# 读取 HDFS 数据
df = spark.read.csv("hdfs:///user/demo/data/customer_service.csv", header=False, encoding="utf-8")
# 清洗:去空行、去重
clean_df = df.filter(df._c0.isNotNull()).filter(df._c1.isNotNull()).dropDuplicates()
# 保存清洗后的数据到 HDFS
clean_df.write.csv("hdfs:///user/demo/data/clean_data", header=False, mode="overwrite", encoding="utf-8")
spark.stop()
执行清洗:
spark-submit --master yarn clean_data.py
【已搞定】《数据清洗》:https://www.cnblogs.com/renhui/p/19606111
目标:基于 Hadoop 清洗后的数据,在纯CPU环境下训练 ERNIE 3.0 轻量版模型,核心代码极简且鲁棒。
# 卸载GPU版本(如有)
pip uninstall paddlepaddle-gpu -y
# 安装CPU版本PaddlePaddle
pip install paddlepaddle==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装其他依赖
pip install paddlenlp hdfs3 pyspark -i https://pypi.tuna.tsinghua.edu.cn/simple
整个过程参照这个:https://www.cnblogs.com/renhui/p/19608104
目标:将训练好的模型压缩为端侧可运行的格式(Paddle Lite 支持),减小体积、提升速度。
编写 lite_optimize.py:
from paddlelite.lite import *
# 1. 初始化优化器
opt = Opt()
# 2. 设置原始模型路径
opt.set_model_file("./ernie_demo_model/model_state.pdmodel")
opt.set_param_file("./ernie_demo_model/model_state.pdiparams")
# 3. 设置优化目标(适配手机arm架构)
opt.set_valid_places("arm")
opt.set_model_type("naive_buffer") # 端侧轻量化格式
# 4. 执行优化,生成端侧模型
opt.run("./ernie_lite_model")
print("模型轻量化完成,输出路径:./ernie_lite_model")
执行轻量化:
python3 lite_optimize.py
目标:在手机上运行轻量化模型,实现本地文本分类。
ernie_lite_model 拷贝到 assets 目录,引入 Paddle Lite 库。import com.baidu.paddle.lite.MobileConfig;
import com.baidu.paddle.lite.Predictor;
import com.baidu.paddle.lite.Tensor;
// 初始化预测器
MobileConfig config = new MobileConfig();
config.setModelFromFile("assets/ernie_lite_model"); // 轻量化模型路径
Predictor predictor = Predictor.createPaddlePredictor(config);
// 输入文本(模拟:需先分词转ID,这里简化用训练时的示例ID)
int[] inputIds = {101, 2769, 4638, 3300, 752, 671, 3736, 102}; // 对应"我的订单怎么还没发货"
Tensor inputTensor = predictor.getInput(0);
inputTensor.resize(new long[]{1, inputIds.length});
inputTensor.setData(inputIds);
// 执行预测
predictor.run();
// 获取输出(分类结果)
Tensor outputTensor = predictor.getOutput(0);
float[] output = outputTensor.getFloatData();
// 解析结果:取最大值对应的标签
int label = 0;
float max = output[0];
for (int i = 1; i < output.length; i++) {
if (output[i] > max) {
max = output[i];
label = i;
}
}
// 输出分类结果
String[] labelNames = {"物流咨询", "退款咨询", "产品咨询"};
System.out.println("分类结果:" + labelNames[label]); // 预期输出:物流咨询
将 Android 项目打包成 APK 安装到手机,运行后输入文本(或直接用示例ID),即可在手机本地看到分类结果,无需联网调用云端模型。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。