Ollama 企业私有化部署大模型最佳解决方案

为什么要私有化部署大模型?

        很多企业为了控制成本和减少核心数据外泄的风险,会通过私有化部署大模型,来控制成本和保障企业的数据安全。

       说到本地化部署,这时就需要说到Ollama框架了。

Ollama 是什么?

        Ollama 是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。它提供了一个简单的API来创建、运行和管理模型,以及一个预构建模型库,可以轻松部署和运行各种大语言模型。

        而对于开源大模型,现在当属Meta公司开源的 Llama3 性能最好 ,Llama3 70b 性能直逼 ChatGpt-3.5 ,而Llama3 405b 的性能已超越了 ChatGpt-4o 。

        说到大模型, 肯定不能漏了向量模型了, 它在搜索性能和效果方面,比 Elasticsearch 好太多了。而 nomic-embed-text 向量模型 比 OpenAI 的 text-embedding-ada-002 和 text-embedding-3-small 更好, 以下是官方的说明:

机器配置如何选择?

Llama 3 模型版本有几个,我们主要关注 80 亿参数(Llama 3 8B)和 700 亿参数(Llama 3 70B)这两个版本。它们对电脑系统配置有不同的要求,主要计算资源(即:CPU/GPU)和内存来存储和处理模型权重:

  •     Llama 3 8B 版本:对于 80 亿参数的模型,建议至少 4 核 CPU,至少 16GB 内存(推荐 32GB 或更高),以确保模型加载和运行过程中的流畅性;模型文件大小 5 GB 左右,磁盘空间有 10GB 足够了;GPU 是可选的,它可以显著提高推理速度。
  •     Llama 3 70B 版本:对于 700 亿参数的模型,CPU 要求显著提高(建议 16 核以上),至少需要 64GB 内存(推荐 128GB 或更高),模型在推理时会占用大量的内存资源;模型文件大小 40GB,远超 8B 版本;强烈推荐使用高端 GPU,以实现有效加速。

        而服务器,我们选用 AutoDL算力云 的机器。而下面我们直接部署700亿参数的 Llama 3,因为Llama 3 8b的回复准确率可能只有30%,而70b的准确率有 80% 以上。而700亿参数的 Llama3 可以直接用在企业里。

机器配置选用

        登陆 AutoDL算力云 官网

  接着选择基础镜像

 Pytorch版本: 2.1.0

 Python版本:3.10

 Cuda版本:12.1

 具体配置如下:

服务器选完启动后,接下来,我们就需要先在服务器中安转 ollama。

Ollama 安装

        官方文档提供了多种安装方式,命令行一键安装、手动安装、docker安装,但是教程比较复杂,我最推荐手动安装,可以进行一些自定义配置,并且速度非常快。

        访问Ollama 官网

  • 命令行一键安装(暂时不用,有点慢)
curl -fsSL https://ollama.com/install.sh | sh
  • 手动安装(推荐)

  本地先下载:

https://ollama.com/download/ollama-linux-amd64

然后上传ollama-linux-amd64文件 

 配置模型下载存储路径环境变量(默认会下载到系统盘,但我们系统盘才30G,部署Llama3 70b不够,需要改到数据盘,数据盘有50G)

vi /etc/profile

添加环境变量

export OLLAMA_MODELS=/root/autodl-tmp/ollama/models

具体如下:

 然后执行以下命令

cp ollama-linux-amd64 /usr/bin/ollama
sudo chmod +x /usr/bin/ollama

启动ollama server:

ollama serve

ollama到此已经安转完毕,并且已经启动。接下来需要安转 Llama3。

Llama3 安转

        在library 中搜索我们需要的大模型,此时我们选用 Llama3.1

执行 以下命令下载启动 Llama3.1

ollama run llama3.1:70b

 等待下载完即可,下载完后会自动进入聊天对话模式

可以按 Ctrl+d 退出,当退出后,想要再启动,则可以直接使用 ollama serve 进行启动大模型,你本地下载多少个大模型我们可以使用 ollama list 查看。而ollama serve 命令会把你下载的大模型全部都启动。

ollama 具体命令

LLama3.1 安转完毕后,接下来把 nomic-embed-text 向量大模型也一并安转完。

向量大模型安装

   在library 中搜索 nomic-embed-text

 然后执行以下命令,进行安装

ollama pull nomic-embed-text:v1.5

接着执行 ollama serve 启动,如果之前已经启动过了,则执行 ps -ef | grep ollama 搜索运行中的进程,然后 kill 进程id 杀死 ollama 后,重新执行 ollama serve 命令。

至此,大模型所属的环境都部署完,接下来,我们本地代码如何调用 我们私有化部署的大模型。

如何调用私有化大模型?

        AutoDL算力云要求,为配合监管要求该地区http/https服务仅对企业认证后的用户开放,您可以使用以下方式在本地访问服务。步骤如下:

点击自定义服务

 我本地是Winows 系统,需要下载这个桌面工具,然后运行。

点击Linux/Mac,获取SSH命令和密码, ssh命令中的端口6006要改成ollama的11434

 

 将获取到的SSH命令和密码,填入桌面工具中。

至此,代理完成,网络打通,此时,就可以调用私有化大模型。

        对于Java 来说,有两个框架可以使用,LangChain4j 和 Spring Ai 。不了解这两个框架的同学,可以去我的主页学习系列文章。

LangChain4j 对接 Ollama 本地部署模型

引入 Maven 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.gorgor</groupId><artifactId>ollama</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><langchain4j.version>0.31.0</langchain4j.version></properties><dependencies><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-ollama</artifactId><version>${langchain4j.version}</version></dependency></dependencies>
</project>

调用聊天模型

/*** @description:* @author: cyh* @create: 2024/8/20 17:15**/
public class OllamaTest {public static void main(String[] args) {LanguageModel model = OllamaLanguageModel.builder().baseUrl("http://localhost:11434").modelName("llama3:70b").build();String result = model.generate("你是谁").content();System.out.println(result);}
}

调用向量模型

/*** @description:* @author: cyh* @create: 2024/8/20 17:15**/
public class OllamaTest {public static void main(String[] args) {OllamaEmbeddingModel embeddingModel = OllamaEmbeddingModel.builder().baseUrl("http://localhost:11434").modelName("nomic-embed-text:v1.5").build();Embedding embedding = embeddingModel.embed("你是谁").content();System.out.println(embedding);}
}

Spring Ai 对接 Ollama 本地部署模型

引入 Maven 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version></parent><modelVersion>4.0.0</modelVersion><groupId>org.gorgor</groupId><artifactId>ollama</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><langchain4j.version>0.31.0</langchain4j.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency></dependencies><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>
</project>

添加 application.properties 配置文件

spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=llama3:70b
spring.ai.ollama.embedding.model=nomic-embed-text:v1.5

调用私有化大模型

/*** @description:* @author: cyh* @create: 2024/8/20 17:15**/
@RestController
public class OllamaTest {@AutowiredOllamaChatModel ollamaChatModel;@AutowiredOllamaEmbeddingModel ollamaEmbeddingModel;@GetMapping("/chat")public String chat(){String content = ollamaChatModel.call("你是谁");return content;}@GetMapping("/embedding")public List<Double> embedding(){List<Double> embed = ollamaEmbeddingModel.embed("你是谁");return embed;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405495.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

张宇1000题vs武忠祥严选题,哪本更接近真题?

张宇1000题强化篇难度还是挺大的 首先是综合度比较高&#xff0c;如果你基础复习的不好&#xff0c;不建议做&#xff0c;张宇1000题强化篇的难度还是比较大的&#xff0c;适合基础已经比较扎实的同学来做&#xff01; 张宇1000题与张宇的高数18讲等课程紧密结合&#xff0c;…

BEV世界:通过统一的BEV潜在空间实现自动驾驶的多模态世界模型

BEVWorld: A Multimodal World Model for Autonomous Driving via Unified BEV Latent Space BEV世界&#xff1a;通过统一的BEV潜在空间实现自动驾驶的多模态世界模型 Abstract World models are receiving increasing attention in autonomous driving for their ability t…

ROS机械臂——ROS结合OpenCV案例(含资源)

纲要 摄像头驱动 图像属性 图像压缩 ### Realsense摄像头 点云展示 ### 点云图像属性 ## 摄像头标定 摄像头标定流程 如何使用标定文件 OpenCV ROS与OpenCV的集成框架 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b0ff143b710543839325d19c7a3c04c5.png R…

【GH】【EXCEL】P4: Chart

文章目录 data and chartdonut chart (radial chart)Radial Chart bar chartBar Chart line chartLine Chart Scatter ChartScatter Chart Surface ChartSurface Chart Chart DecoratorsChart Decorators Chart GraphicsChart Graphics data and chart donut chart (radial cha…

每日一问:深入理解JVM——结构与类的加载过程解析

每日一问&#xff1a;深入理解JVM——结构与类的加载过程解析 在Java的世界中&#xff0c;JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是一个核心概念。它是Java程序能够跨平台运行的基础&#xff0c;负责执行Java字节码&#xff0c;并为Java应用程…

海南云亿商务咨询有限公司助力抖音商家破浪前行

在当下这个短视频与直播电商风起云涌的时代&#xff0c;抖音作为头部平台&#xff0c;正以其庞大的用户基数和强大的算法推荐机制&#xff0c;成为众多品牌与商家竞相追逐的新蓝海。而在这片波澜壮阔的海洋中&#xff0c;海南云亿商务咨询有限公司如同一艘稳健的航船&#xff0…

OpenCV几何图像变换(1)映射转换函数convertMaps()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像变换映射从一种表示形式转换为另一种表示形式。 该函数将用于 remap 的映射对从一种表示形式转换为另一种表示形式。以下选项 ((map1.type…

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

VMware vSphere ESXi确定vmnic*网络适配器用途的方法

近期有VMware vSphere ESXi宿主机从VMware ESXi, 6.7.0, 17499825版本重装为VMware ESXi, 7.0.3, 21930508后&#xff0c;发现对应网卡的物理适配器名vmnic*发生变化&#xff0c;本文记录了如何确定网络适配器用途的方法。 一、问题描述 原宿主机为ESXi, 6.7.0, 17499825&am…

【YOLO5 项目实战】(4)红外目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与测试 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;3&#xff09;P…

2、Unity【基础】Mono中的重要内容

Unity基础 MonoBehavior中的重要内容 文章目录 Mono中的重要内容1、延迟函数1、延迟函数概念2、延迟函数使用3、延迟函数受对象失活销毁影响思考1 利用延时函数实现计时器思考2 延时销毁 2、协同程序1、Unity是否支持多线程2、协同程序概念3、协同程序和线程的区别4、协程的使用…

西门子PLC12001500变量标签导入昆仑通态触摸屏

目录 新建DB测试数据块导出DB数据导出结构体类型触摸屏导入标签 新建DB测试数据块 新建DB1数据块&#xff0c;里面包含普通bool数据类型&#xff0c;以及结构体数据类型 同时需要取消优化的块访问 导出DB数据 DB1数据块右击——从块生成源——仅所选块 这里要注意的是导出文…

悟空降世 撼动全球

文&#xff5c;琥珀食酒社 作者 | 积溪 一只猴子能值多少钱&#xff1f; 答案是&#xff1a;13个小目标 这两天 只要你家没有断网 一定会被这只猴子刷屏 它就是咱国产的3A游戏 《黑神话&#xff1a;悟空》 这只猴子到底有多火&#xff1f; 这么跟你说吧 茅台见了它都…

备战秋招60天算法挑战,Day22

题目链接&#xff1a; https://leetcode.cn/problems/missing-number/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1HS42197Hc/ LeetCode 268.丢失的数字 题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组…

微服务注册中心

目录 一、微服务的注册中心 1、注册中心的主要作用 &#xff08;1&#xff09;服务发现 &#xff08;2&#xff09;服务配置 &#xff08;3&#xff09;服务健康检测 2、 常见的注册中心 二、nacos简介 1、nacos实战入门 &#xff08;1&#xff09;搭建nacos环境 &am…

Vue插值:双大括号标签、v-text、v-html、v-bind 指令

创建应用程序实例后&#xff0c;需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后&#xff0c;数据和视图会相互关联&#xff0c;当数据发生变化时&#xff0c;视图会自动进行更新。这样就无须手动获取 DOM 的值&#xff0c;使代码更加简洁&…

外部环境连接kafka

修改配置文件外部环境连接kafka 1、kafka的docker官方镜像地址2、kafka官方介绍的三种连接方式3、方式一&#xff1a;Default configs默认配置4、方式二&#xff1a;File input&#xff08;文件输入&#xff1a;外部配置文件替换docker容器内的配置文件&#xff09;4.1、首先查…

自存实践本地访问 nginx放前端打包好的项目

nginx 部署前端项目_哔哩哔哩_bilibili 将打包好的dits文件放到 配置nginx.conf文件的location 启动命令 start nginx.exe 输入localhost即可访问打包好的项目 nginx的特点 1.静态资源 2.转发 设置代理转发请求 关闭nginx .\nginx.exe -s quit

分享从零开始学习网络设备配置--任务6.2 实现网络设备的远程管理

任务描述 某公司的网络管理员小赵负责公司办公网的管理工作&#xff0c;熟悉了公司内部设备运行情况&#xff0c;每天都需要保障公司内部网络设备的正常运行&#xff0c;同时进行办公网的日常管理和维护工作。 在安装办公网中&#xff0c;路由器和交换机放置在中心机房&…

【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】

红色直升飞机生日视频制作教程AE模板改文字广软件告生成器素材 怎么如何做的【生日视频制作】教师节中秋节国庆节红色直升飞机AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频…