只会CRUD必看!PyTorch On Java实战:Java原生写大模型

张开发
2026/4/3 23:39:52 15 分钟阅读
只会CRUD必看!PyTorch On Java实战:Java原生写大模型
文章目录前言一、为什么Java程序员搞AI总觉得自己像个后娘养的二、DJL是个啥它可不是什么山寨货三、环境搭建比泡方便面还简单核心依赖CPU 环境指定GPU CUDA 12.4 环境四、实战第一弹让Java认出猫和狗五、实战第二弹训练自己的房价预测模型六、GPU加速让你的显卡燃烧起来七、从CRUD到AIJava程序员的进化之路八、总结与展望无意间发现了一个巨牛巨牛巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01前言你是不是也有这样的焦虑每天写着insert、update、select突然有一天发现隔壁工位的小张开始聊什么大模型微调、“神经网络训练”而你连Python都不会写更别提什么PyTorch了。看着招聘JD上熟悉AI开发优先的字样手里的Java代码突然就不香了。别慌谁说Java程序员就不能玩深度学习了今天我就来给你揭秘一个神器——Deep Java Library (DJL)让你用纯Java代码就能调用PyTorch训练神经网络甚至跑大模型。不用学Python不用装Anaconda就凭你那一手Spring Boot的功夫照样能在AI时代横着走一、为什么Java程序员搞AI总觉得自己像个后娘养的话说回来咱们Java程序员在AI领域确实有点委屈。你看那些AI教程十个有九个是Python的还有一个是C的。GitHub上的开源模型README里写着pip install xxx咱们只能默默关掉页面。这就像什么呢就像全世界都在说英语只有你一个人说汉语。不是咱们笨是咱们手里拿的是假船票——Java这门语言在Web开发、企业级应用里称王称霸但在AI领域确实是个外来户。但是这并不意味着Java就不能搞AI。相反Java有着Python无法比拟的优势性能强、生态成熟、工程化程度高、部署方便。你总不能让银行的交易系统用Python跑吧那得是Java的天下。那问题来了Java怎么和PyTorch这个Python亲儿子搞好关系呢答案就是DJLDeep Java Library——这是Amazon开源的一个深度学习库它就像一个翻译官让Java代码能够直接调用PyTorch的C底层接口。换句话说你写的Java代码最终跑的是原生的PyTorch引擎性能丝毫不打折。二、DJL是个啥它可不是什么山寨货有些朋友可能会问这玩意儿靠谱吗不会是Python代码套了个Java壳子吧放心DJL可是正经的正规军。它是Amazon AI团队维护的开源项目GitHub上万Star已广泛用于生产环境。最重要的是支持原生PyTorch引擎版本紧跟官方目前支持 PyTorch 2.5.12024年11月。打个比方如果把PyTorch比作一辆法拉利跑车Python是车钥匙那么DJL就是一把万能钥匙适配器让Java程序员也能启动这辆跑车。你踩油门、转弯全部原汁原味不会因Java封装而迟钝。而且DJL有巨大优势自动引擎管理。你不需要手动下载PyTorch的DLL/SO文件不用配置环境变量Maven依赖一拉自动根据操作系统Windows/Linux/Mac和硬件CPU/CUDA 11.8/12.1/12.4下载对应原生库。三、环境搭建比泡方便面还简单创建Maven项目在pom.xml加入依赖核心依赖ai.djl api 0.31.0 ai.djl.pytorch pytorch-engine 0.31.0 ai.djl.pytorch pytorch-native-auto 2.5.1 runtimepytorch-native-auto是智能管家自动识别CPU/GPU、系统版本第一次运行自动下载几百MB。CPU 环境指定ai.djl.pytorch pytorch-native-cpu 2.5.1 win-x86_64GPU CUDA 12.4 环境ai.djl.pytorch pytorch-native-cu124 2.5.1 win-x86_64四、实战第一弹让Java认出猫和狗从最简单图像分类开始Java 原生实现图片识别猫狗分类。importai.djl.*;importai.djl.inference.*;importai.djl.modality.*;importai.djl.modality.cv.*;importai.djl.modality.cv.transform.*;importai.djl.modality.cv.translator.*;importai.djl.repository.zoo.*;importai.djl.translate.*;importai.djl.util.*;importjava.nio.file.*;importjava.util.*;publicclassImageClassificationDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 加载预训练ResNet50模型CriteriacriteriaCriteria.builder().setTypes(Image.class,Classifications.class).optApplication(Application.CV.IMAGE_CLASSIFICATION).optGroupId(ai.djl.pytorch).optArtifactId(resnet50).optTranslator(ImageClassificationTranslator.builder().addTransform(newResize(224,224)).addTransform(newToTensor()).addTransform(newNormalize(newfloat[]{0.485f,0.456f,0.406f},newfloat[]{0.229f,0.224f,0.225f})).build()).build();// 2. 加载模型ZooModelmodelcriteria.loadModel();Predictorpredictormodel.newPredictor();// 3. 读取图片ImageimgImageFactory.getInstance().fromFile(Paths.get(d:/test/cat.jpg));// 4. 推理Classificationsresultpredictor.predict(img);// 5. 输出结果System.out.println(识别结果);result.items().subList(0,5).forEach(System.out::println);// 6. 释放资源predictor.close();model.close();}}运行结果示例class: tabby, tabby cat, probability: 0.9234 class: tiger cat, probability: 0.0456 class: Egyptian cat, probability: 0.0289五、实战第二弹训练自己的房价预测模型纯Java从零训练神经网络实现房价预测线性回归全连接网络。importai.djl.*;importai.djl.basicdataset.tabular.*;importai.djl.ndarray.*;importai.djl.ndarray.types.*;importai.djl.nn.*;importai.djl.nn.core.*;importai.djl.training.*;importai.djl.training.dataset.*;importai.djl.training.initializer.*;importai.djl.training.listener.*;importai.djl.training.loss.*;importai.djl.training.optimizer.*;importai.djl.training.tracker.*;importai.djl.translate.*;importjava.nio.file.*;publicclassHousePriceTraining{publicstaticvoidmain(String[]args)throwsException{intbatchSize32;intinputSize3;// 面积、卧室数、房龄// 模拟数据集ArrayDatasetdatasetnewArrayDataset.Builder().setData(NDManager.newBaseManager().randomUniform(0,1,newShape(1000,inputSize))).optLabels(NDManager.newBaseManager().randomUniform(100,500,newShape(1000,1))).setSampling(batchSize,true).build();// 构建神经网络SequentialBlockblocknewSequentialBlock();block.add(Linear.builder().setUnits(64).build());block.add(Blocks.batchFlattenBlock(inputSize));block.add(Activation::relu);block.add(Linear.builder().setUnits(32).build());block.add(Activation::relu);block.add(Linear.builder().setUnits(1).build());// 模型配置ModelmodelModel.newInstance(house-price-predictor);model.setBlock(block);LosslossLoss.l2Loss();OptimizeroptimizerOptimizer.adam().optLearningRateTracker(Tracker.fixed(0.001f)).build();DefaultTrainingConfigconfignewDefaultTrainingConfig(loss).optOptimizer(optimizer).optInitializer(newXavierInitializer()).addTrainingListeners(TrainingListener.Defaults.logging());// 训练Trainertrainermodel.newTrainer(config);trainer.initialize(newShape(batchSize,inputSize));intepochs10;for(intepoch0;epochepochs;epoch){for(Batchbatch:trainer.iterateDataset(dataset)){NDArrayxbatch.getData().head();NDArrayybatch.getLabels().head();NDArraypredtrainer.forward(newNDList(x)).singletonOrThrow();NDArraylossValueloss.evaluate(newNDList(y),newNDList(pred));trainer.backward(lossValue);trainer.step();batch.close();}System.out.println(Epoch epoch 完成);}// 保存模型model.save(Paths.get(d:/models),house-price);System.out.println(模型训练完成并已保存);trainer.close();model.close();}}六、GPU加速让你的显卡燃烧起来只需要换CUDA依赖指定设备即可自动GPU加速无需写CUDA代码。DevicedeviceDevice.gpu();trainer.setDevices(newDevice[]{device});速度提升10倍以上训练效率大幅提升。七、从CRUD到AIJava程序员的进化之路AI开发并没那么神秘神经网络 复杂数学函数深度学习 调整函数参数Java程序员的工程化思维在AI落地中反而是巨大优势高并发部署稳定微服务集成生产运维DJL 支持PyTorch、TensorFlow、ONNX Runtime。你可以用Python训练模型用Java 封装成 Spring Boot API接入 Spring Cloud 微服务全程Java技术栈无缝对接大模型。DJL 已支持 PyTorch 2.5、Transformer优化、LLaMA等大模型推理Java 实现类ChatGPT应用完全可行。八、总结与展望本篇你学会了DJL 是什么Amazon开源Java深度学习框架原生支持PyTorch环境搭建Maven依赖自动CPU/GPU适配图像分类加载预训练模型实现图片识别模型训练Java从零搭建、训练、保存神经网络工程化AI模型 Java生态无缝集成这只是入门后续我们会继续讲解CNN卷积神经网络RNN循环网络Transformer架构大模型推理Stable Diffusion AI绘画无意间发现了一个巨牛巨牛巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01

更多文章