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

news2024/11/26 10:38:54

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

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

       说到本地化部署,这时就需要说到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 {

    @Autowired
    OllamaChatModel ollamaChatModel;

    @Autowired
    OllamaEmbeddingModel 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.coloradmin.cn/o/2061067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

霸王茶姬小程序任务脚本

霸王茶姬小程序任务脚本 小白操作----仅供学习研究参考 功能&#xff1a; 积分签到 解析 该脚本用于“霸王茶姬小程序”的签到和积分查询操作。通过模拟网络请求登录账号&#xff0c;获取个人信息&#xff0c;执行每日签到&#xff0c;并查询积分情况。支持多账号操作&#…

3.js - 使用着色器实现各种图形

有更多案例&#xff0c;私我 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls import * as dat from dat.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// ts-ignore import basi…

一篇初学者入门Python匿名函数与Lambda表达式详细教程

首先要了解了如何定义和使用函数的参数,以及如何从一个函数返回值.这篇文章将深入介绍Python中的“匿名函数”和“Lambda表达式”,这两个概念在实际编程中非常有用 如果你对Python感兴趣的话&#xff0c;可以试试我整理的这一份全套的Python学习资料&#xff0c;【点击这里】免…

数据库表转为库表设计文档

开发完之后&#xff0c;就一大堆文档需要写的&#xff0c;其中就有库表设计文档&#xff0c;所以直接写个接口&#xff0c;直接把库表转为库表设计文档就行&#xff0c;省一大堆时间摸鱼了。直接贴代码。 pom文件引入依赖 <!--引入数据库表结构文档生成器Screw依赖--> &…

《驾驭未来:大型语言模型的理论与实践》—— 探索大模型的奥秘

在这个信息爆炸的时代&#xff0c;人工智能尤其是大型语言模型&#xff08;LLM&#xff09;已经成为推动科技进步的关键力量。无论是科学研究、商业应用还是日常生活&#xff0c;大型语言模型都在不断地改变着我们的世界。对于那些渴望深入了解这一前沿技术的人来说&#xff0c…

JAVA实现单词词频统计-辅助英文考试学习

一、基于GUI的可以自行输入的英文单词词频统计软件

SpingBoot集成kafka发送读取消息

SpingBoot集成kafka开发 kafka的几个常见概念 1、springboot和kafka对应版本&#xff08;重要&#xff09;2、创建springboot项目&#xff0c;引入kafka依赖2.1、生产者EventProducer2.2、消费者EventConsumer2.3、启动生产者的方法SpringBoot01KafkaBaseApplication2.4、appli…

小程序学习day10-自定义组件的data数据、方法、属性,data与properties的关系、自定子组件之数据监听器

39、WXS脚本&#xff08;小程序独有的一套脚本语言&#xff09;&#xff08;续&#xff09; &#xff08;6&#xff09;自定义组件的data数据、方法、属性 1&#xff09;自定义组件的data数据&#xff08;在小程序组件中&#xff0c;用于组件模版渲染的私有数据&#xff09; …

定格精彩瞬间!详解六自由度技术原理及应用

在体育赛事中&#xff0c;观赏各项目的精彩瞬间&#xff0c;欣赏运动员的卓越表现是观众们最为关注的焦点。以体操跳马为例&#xff0c;运动员们全力助跑&#xff0c;然后奋力起跳、腾空&#xff0c;接着精准的推手和转体动作&#xff0c;最后稳稳落地&#xff0c;整个动作行云…

【JAVA CORE_API】Day19 多线程API(2)、多线程并发安全问题、同步

多线程API 进程和线程 进程&#xff1a;进程就像是一个程序在电脑里运行时的一个实例。你可以把它想象成一个独立的小工人&#xff0c;专门负责完成某项任务&#xff08;比如打开浏览器、播放音乐&#xff09;。每个进程都有自己独立的资源&#xff08;比如内存&#xff09;和…

python 可迭代,迭代器,生成器,装饰器

1. 可迭代&#xff08;Iterable&#xff09; 可迭代 是指一个对象可以返回一个迭代器的对象。也就是说&#xff0c;它实现了 __iter__() 方法或 __getitem__() 方法。常见的可迭代对象有列表、元组、字符串、字典和集合。 from collections.abc import Iterablei 100 s &qu…

墙裂推荐!云上机密计算,阿里云上体验了一下海光内存加密和远程认证

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 机密计算目录 前言1、构…

哈希原理实现

本节主要看源代码实现 哈希特点 哈希&#xff08;Hashing&#xff09;是一种将数据映射到固定大小的表中以实现快速查找的数据结构和算法方法。哈希的主要特点包括&#xff1a; 1. 高效的查找、插入和删除 时间复杂度&#xff1a;哈希表通常提供近乎常数时间的查找、插入和…

app安全评估报告的常见留存措施(内附独家资料)

对用户账号、操作时间、操作类型、网络源地址和目标地址、网络源端口、客户端硬件特征等日志信息以及用户发布信息记录的留存措施 1**. 用户账号信息**&#xff1a;我们将用户账号信息安全存储&#xff0c;只有授权的人员能够访问。这些信息包括用户名、电子邮件地址等&#xf…

【C++ 面试 - 面向对象】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

VAuditDemo审计之二次注入漏洞

目录 VAuditDemo二次注入漏洞 搜索危险函数&#xff0c;用户可控点 regCheck.php messageSub.php message.php 漏洞调用链 漏洞错误利用过程 注册用户 xxxx, 发表payload留言 漏洞正确利用过程 注册用户 wwww\ 退出用户 wwww\\ 使用 wwww\ 登录 发表留言 替换dat…

《javaEE篇》--定时器

定时器概念 当我们不需要某个线程立刻执行&#xff0c;而是在指定时间点或指定时间段之后执行&#xff0c;假如我们要定期清理数据库里的一些信息时&#xff0c;如果每次都手动清理的话就太麻烦&#xff0c;所以就可以使用定时器。定时器就可以比作一个闹钟&#xff0c;可以让…

C++ 设计模式(6. 适配器模式)

适配器模式Adapter Pattern是一种结构型设计模式&#xff0c;它可以将一个类的接口转换成客户希望的另一个接口&#xff0c;主要目的是充当两个不同接口之间的桥梁&#xff0c;使得原本接口不兼容的类能够一起工作。基本结构 Target 是目标接口&#xff0c;Adaptee 是需要适配的…

微信小程序实例代码解读

以微信 小程序开发工具给的示例代码为例&#xff1a; 主页代码&#xff1a; index.wxml 这个文件是一个微信小程序页面的 WXML 结构,主要功能是展示一个快速开始教程的步骤和内容。 源代码&#xff1a; <!--index.wxml--> <view class"container">&l…

ZK-Rollups测评

1. 引言 Matter Labs团队和多个高校研究人员一起&#xff0c;发布2024年论文《Analyzing and Benchmarking ZK-Rollups》&#xff0c;开源代码见&#xff1a; https://github.com/StefanosChaliasos/zkrollup-benchmarking&#xff08;Python&#xff09; 其中&#xff1a; …