关于自己部署AI大模型踩的坑(三)—— 部署

news2024/9/24 1:25:24

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.(钢铁侠中的机器人管家)。

上一篇写了我最近在部署自己的大模型,使用llama3.1, 和通义千问2。虽然最终结果也是成功了,过程却十分地坎坷。所以这一篇文章一是总结其中遇到的问题,软件、硬件,想到什么就写什么,算是随笔吧。也给后面自己部署的同学们写个避雷指南。

前面已经写了硬件和GPU的相关文章:

关于自己部署AI大模型踩的坑(一)——硬件篇_llama3.1 70b 硬件要求-CSDN博客

关于自己部署AI大模型踩的坑(二)—— GPU篇_ollama用cpu运行大模型是模拟gpu?-CSDN博客

接下来就是要部署大模型了。如果你只是想体验一下大模型,不打算使用GPU,那其实相对来说简单很多。而如果你要你的大模型更加智能,更加地有效地帮助你工作,GPU的使用在所难免,而且GPU的性能还是越高越好——这里有金钱滚滚的声音。

这篇先写部署成功的一些经历:

一、系统和驱动。

虽然windows也可以部署,但对于一个技术人员来说,linux有着不可比拟的稳定性和便捷性,尤其是Docker的使用(Windows也可以部署Docker,非开发人员也可以使用Windows部署相关应用,我选择了Ubuntu来部署)。

安装使用的是Ubuntu24.04, GPU使用的是NVIDIA Tesla P40。

之前选择的是NVIDIA Tesla K80。但K80的 Computer Capability(计算能力)只有3.7,Ollama要求GPU的计算能力在5.0以上,最好是6.0以上。

虽然可以通过修改Ollama源码,重新编译的方式使得Ollama可以使用K80的GPU,但各种适配的环境、应用都需要更改,有点太麻烦了。

同时,NVIDIA提供的CUDA版本,也有点落后了。K80目前可以安装的CUDA最高版本为11.4,而P40最高可以到12.6。

二、安装Ollama

1、自动安装

Ollama的安装,在官方页面上的介绍很简单,只需要一条命令:

curl -fsSL https://ollama.com/install.sh | sh

2、手动安装

但是众所周知的原因,我推荐使用手动安装:

curl -fsSL https://ollama.com/download/ollama-linux-amd64.tgz | sudo tar zx -C /usr

当然,对于步步都想要亲力亲为的我来说,选择的命令是:

wget https://ollama.com/download/ollama-linux-amd64.tgz
sudo tar zxvf ollama-linux-amd64.tgz -C /usr

通过上面两条命令,你可以清楚的看到Ollama的安装过程,和安装路径。

然后新添加一个用户:

sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama

新建一个service文件 /etc/systemd/system/ollama.service:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3

[Install]
WantedBy=default.target

如果需要非本机调用Ollama接口,还需要在Service标签下添加一行:

Environment="OLLAMA_HOST=0.0.0.0"

比如我的最终就是:

[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"

[Install]
WantedBy=default.target

然后启动Ollama服务

sudo systemctl daemon-reload
sudo systemctl enable ollama

这时你在shell里输入命令 ollama serve, 可以看到 11434端口被占用的响应。这也说明Ollama已经安装成功了。

三、运行大模型。

安装好Ollama后,运行大模型就非常方便了,只需要一条命令: ollama run xxx

比如我想使用llama3.1, 那么输入命令 ollama run llama3.1,ollama即会自动运行,尝试加载llama3.1的模型。如果本地没有模型文件,ollama即开始自动下载。

因为未做优化的llama3.1对汉语的支持并不太好,所以我选择了阿里的通义千问来做测试:

当然,你也可以选择Ollama支持的任意大模型来使用:

ModelParametersSizeDownload
Llama 3.18B4.7GBollama run llama3.1
Llama 3.170B40GBollama run llama3.1:70b
Llama 3.1405B231GBollama run llama3.1:405b
Phi 3 Mini3.8B2.3GBollama run phi3
Phi 3 Medium14B7.9GBollama run phi3:medium
Gemma 22B1.6GBollama run gemma2:2b
Gemma 29B5.5GBollama run gemma2
Gemma 227B16GBollama run gemma2:27b
Mistral7B4.1GBollama run mistral
Moondream 21.4B829MBollama run moondream
Neural Chat7B4.1GBollama run neural-chat
Starling7B4.1GBollama run starling-lm
Code Llama7B3.8GBollama run codellama
Llama 2 Uncensored7B3.8GBollama run llama2-uncensored
LLaVA7B4.5GBollama run llava
Solar10.7B6.1GBollama run solar

四、安装open-webui

Ollama安装完成后,仍然是一个命令行的工具,虽然他也提供了API可供开发使用,比如python, js, java,均可供开发人员调用。

而目前开源的界面工具已经有不少,并且做得相当优秀,比如open-webui。就很简洁,也很方便。

open-webui安装部署有两种试:Docker部署和手动安装。

1、Docker部署

相对来说很方便,但有问题起来却非常地复杂。

因为我不喜欢他自动启动,所以我去掉了 --restart always 这段命令

使用CPU运行:

# 使用CPU

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

# 如果Ollama不在本地
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

# 使用GPU
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:cuda

# 使用国内镜像拉取
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui registry.cn-shenzhen.aliyuncs.com/funet8/open-webui:cuda

# 当然上面的几条命令也可以换成国内镜像使用。
# 比如CPU版

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui registry.cn-shenzhen.aliyuncs.com/funet8/open-webui:main

2、手动部署

在确定自己的硬件和软件都支持的前提下,也可以手动部署。不过建议小白不要尝试,其中很多问题,可能小白解决不了。

下面是open-webui官方文档里的部署方法,我部署的过程没记录,很复杂就是了(比如python虚拟环境venv/conda, torch版本和安装等等)。

Requirements 📦​
  • 🐰 Node.js >= 20.10
  • 🐍 Python >= 3.11
Build and Install 🛠️​

Run the following commands to install:

For Linux/macOS:

git clone https://github.com/open-webui/open-webui.git
cd open-webui/

# Copying required .env file
cp -RPp .env.example .env

# Building Frontend Using Node
npm install
npm run build

cd ./backend

# Optional: To install using Conda as your development environment, follow these instructions:
# Create and activate a Conda environment
conda create --name open-webui-env python=3.11
conda activate open-webui-env

# Install dependencies
pip install -r requirements.txt -U

# Start the application
bash start.sh

For Windows:

git clone https://github.com/open-webui/open-webui.git
cd open-webui

copy .env.example .env

npm install
npm run build

cd .\backend

# Optional: To install using Conda as your development environment, follow these instructions:
# Create and activate a Conda environment
conda create --name open-webui-env python=3.11
conda activate open-webui-env

pip install -r requirements.txt -U

start.bat

如果都部署成功,就可以通过 http://ip:3000 的地址访问到界面了。

同时也可以看到GPU已经在工作了(测试使用的是qwen2:0.5b,P40 24G显存,理论上可以支持7b甚至更高的模型流畅使用):

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

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

相关文章

Nginx快速入门:编译及常用配置

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,也是一个 IMAP/POP3 邮件代理服务器。它以其高并发处理能力和低资源消耗而闻名,能够同时处理数千个连接。 Nginx 的主要功能包括: 静态资源服务器:Nginx 可以担任静态资源服务…

【Python零基础】Python测试

文章目录 前言一、使用pip安装pytest1.1 更新pip1.2 安装pytest 二、测试函数2.1 编写测试文件2.2 运行测试2.3 测试不通过2.4 测试不通过2.4 增加新测试 三、测试类3.1 断言3.2 夹具 总结 前言 代码测试是程序开发中极其重要的一环,任何代码都应该经过测试才能上生…

sqli-labs靶场通关攻略(五十一到五十六关)

sqli-labs-master靶场第五十一关 步骤一,尝试输入?sort1 我们发现这关可以报错注入 步骤二,爆库名 ?sort1 and updatexml(1,concat(0x7e,database(),0x7e),1)-- 步骤三,爆表名 ?sort1 and updatexml(1,concat(0x7e,(select group_conc…

数据结构:树形结构(树、堆)详解

数据结构:树形结构(树、堆)详解 一、树(一)树的性质(二)树的种类二叉树多叉树满N叉树完全N叉树 (三)二叉树的实现1、二叉树结构定义2、二叉树功能实现(1&…

数字化转型中的数据应用:挑战、机遇与追赶之路

在数字化时代的大潮中,数据已悄然从企业的边缘资源跃升为最宝贵的核心资产。然而,这场数据盛宴并未带来普遍的数据应用成熟,反而揭示了企业在数据利用上的巨大鸿沟。即便是全球500强企业,在数据应用的征途上,也仅仅是比…

秋招突击——笔试总结——8/31——京东笔试

文章目录 引言正文第一题——下一个字典序的字符个人实现 第二题——冒泡排序的变种个人实现空间复杂度比较低的版本 第三题——两人走路个人实现 总结 引言 今天京东笔试做的并不好,有很多问题的关窍都没有找到,所以在很多问题上都浪费了大量的时间&am…

JVM下篇:性能监控与调优篇-04-JVM运行时参数

文章目录 4. JVM 运行时参数4.1. JVM 参数选项4.1.1. 类型一:标准参数选项4.1.2. 类型二:-X 参数选项4.1.3. 类型三:-XX 参数选项 4.2. 添加 JVM 参数选项4.3. 常用的 JVM 参数选项4.3.1. 打印设置的 XX 选项及值4.3.2. 堆、栈、方法区等内存…

Java多线程(二)线程同步

1、线程同步问题 当多个线程同时操作同一个数据时,就会产生线程同步问题。 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“同步”。当一个线程运行到需要同步的语句后,CPU不去执行其他线程中的、可能影响当前线程中的下一句代…

记一次学习--webshell绕过(动态检测)

目录 第一种样本 代码分析 第二种样本 代码分析 题目分析 结果 不断学习&#xff0c;不断进步 快就是慢&#xff0c;慢就是快。审视自身 第一种样本 <?php class xxxd implements IteratorAggregate {public $xxx "system";public function __construct(…

C++ | Leetcode C++题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; class Solution { public:int lengthLongestPath(string input) {int n input.size();int pos 0;int ans 0;vector<int> level(n 1);while (pos < n) {/* 检测当前文件的深度 */int depth 1;while (pos < n && in…

R语言统计分析——单因素协方差分析

参考资料&#xff1a;R语言实战【第2版】 单因素协方差分析&#xff08;ANCONA&#xff09;扩展了单因素方差分析&#xff08;ANOVA&#xff09;&#xff0c;包含一个或多个定量的协变量。下面使用multcomp包中的litter数据集进行操作&#xff1a; # 加载数据集 data(litter,p…

0-HDMI高速接口协议基础介绍

高清多媒体接口(HDMI&#xff0c;High Definition Multimedia Interface)是一种数字化视频/音频接 口技术&#xff0c;是适合影像传输的专用型数字化接口&#xff0c;其可同时传送音频和视频信号&#xff0c;同时无需在 信号传送前进行数/模或者模/数转换。从2002年HDMI发布最初…

Windows 环境nginx安装使用及目录结构详解

一、 Windows 环境nginx安装及基本使用 1、下载 nginx-1.27.1 最新的主线版本 安装 nginx/Windows&#xff0c;请下载1.27.1最新的主线版本&#xff0c; nginx 的主线分支包含所有已知的修复程序。 2、 解压缩 nginx-1.27.1 版本 nginx/Windows 作为标准控制台应用程序&#x…

YOLO | YOLO目标检测算法(分类、检测、分割)

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 分类、检测、分割 思考&#xff1a;计算机视觉能够解决哪些问题&#xff1f;&#xff1f;&#xff1f;&#xff1f;分类、检测、分割 分割&#xff1a;语义分割和实例分…

SOMYO™——将“照片”转为“手绘素描”的专业级软件

一定要往下看&#xff0c;最精彩的在最后哦&#xff01; 1 关于素描的几句话 素描是西方美术的灵魂。值得为自己、亲人与好友留下一张别致的素描。 素描的定义&#xff1a;艺术家通过线条的粗细、浓淡、疏密等变化&#xff0c;试图精准地再现形态的体感、质感和动感的艺术…

轻量级进程(LWP)和线程

线程是CPU调度的基本单位 进程是承担系统资源的基本实体(进程是资源分配的基本单位) 线程并不拥有系统资源,而是共享使用进程的资源,进程的资源由系统进行分配 任何一个线程都可以创建或撤销另一个线程 多进程里&#xff0c;子进程可复制父进程的所有堆和栈的数据&#xff1b…

黑神话悟空-提高画质、防卡顿、修复等各种功能、各种CT表、各种存档、武器包、人物、装备替换等193+MOD合集

193MOD合集&#xff0c;提高画质&#xff0c;减少卡顿、修复等功能MOD各种CT表各种存档武器包、物品、人物、装备、造型替换等 具体MOD可在文件内查看 特别说明&#xff1a;3款珍品大圣套装替换初始套装MOD是不同的&#xff0c;&#xff08;其中全装备珍品大圣套装是不可以跳出…

笔记 12 : 彭老师课本第 6 章, PWM ,代码实践

&#xff08;85&#xff09; 驱动写多了&#xff0c;会发现&#xff0c;首先就是硬件的初始化&#xff0c;配置硬件。 &#xff08;86&#xff09;查看源代码组织&#xff1a; &#xff08;87&#xff09; 编译过程不变&#xff1a; &#xff08;88&#xff09; 运行同以前的步…

2024年8月总结及随笔之逝

1. 回头看 日更坚持了609天。 读《零信任网络&#xff1a;在不可信网络中构建安全系统》更新完成读《软件开发安全之道&#xff1a;概率、设计与实施》开更并持续更新 2023年至2024年8月底累计码字1463007字&#xff0c;累计日均码字2402字。 2024年8月码字109278字&#x…

全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型

全网最适合入门的面向对象编程教程&#xff1a;42 Python 常用复合数据类型-collections 容器数据类型 摘要&#xff1a; 在 Python 中&#xff0c;collections 模块提供了一组高效、功能强大的容器数据类型&#xff0c;扩展了内置的基础数据类型&#xff08;如 list、tuple、…