手把手教你在Fedora 39上安装Ollama,新手必看教程 (2025年05月)

云信安装大师
90
AI 质量分
10 5 月, 2025
5 分钟阅读
0 阅读

手把手教你在Fedora 39上安装Ollama,新手必看教程 (2025年05月)

引言

Ollama是一个强大的本地大语言模型运行工具,可以让你在本地电脑上运行各种开源AI模型。本教程将详细指导你在Fedora 39系统上安装和配置Ollama,即使你是Linux新手也能轻松上手。

准备工作

在开始安装前,请确保:

  1. 你使用的是Fedora 39系统(可通过cat /etc/fedora-release命令查看)
  2. 你的系统已更新到最新版本
  3. 你有管理员权限(能使用sudo命令)
  4. 你的电脑至少有8GB内存(运行大模型需要更多内存)

第一步:更新系统

首先打开终端(快捷键Ctrl+Alt+T),执行以下命令更新系统:

代码片段
sudo dnf update -y

参数说明:
sudo: 以管理员权限执行
dnf: Fedora的包管理工具
update: 更新所有已安装的软件包
-y: 自动确认所有提示

第二步:安装依赖项

Ollama需要一些基础依赖才能正常运行:

代码片段
sudo dnf install -y curl wget git tar gzip

依赖项说明:
curl: 用于从网络下载文件
wget: 另一种下载工具
git: 版本控制工具(某些组件可能需要)
targzip: 用于解压文件

第三步:下载并安装Ollama

官方提供了简单的安装脚本,我们直接使用:

代码片段
curl -fsSL https://ollama.com/install.sh | sh

命令分解说明:
1. curl -fsSL:
-f: silent失败模式(不显示错误信息)
-s: silent模式(不显示进度)
-S: 显示错误信息
-L: 跟随重定向
2. | sh: 将下载的脚本直接传递给shell执行

注意事项:
– 这个命令需要联网下载约100MB的数据,请确保网络畅通
– 如果遇到权限问题,可以在命令前加上sudo

第四步:启动Ollama服务

安装完成后,我们需要启动服务:

代码片段
systemctl start ollama

要让Ollama开机自启,执行:

代码片段
systemctl enable ollama

验证服务状态:

代码片段
systemctl status ollama

如果看到”active (running)”字样,说明服务已成功启动。

第五步:测试Ollama是否正常工作

现在我们可以测试一下Ollama是否能正常运行。我们先拉取一个小型模型进行测试:

代码片段
ollama pull llama2:7b-chat-q4_0

参数解释:
pull: 从模型库下载模型
llama2:7b-chat-q4_0: Meta的Llama2模型的7B参数版本,量化到4位精度

注意事项:
– 这个模型大小约3.8GB,下载时间取决于你的网速
– Fedora默认防火墙可能会阻止连接,如果遇到问题可以临时关闭防火墙:

代码片段
sudo systemctl stop firewalld.service

下载完成后,我们可以与模型交互:

代码片段
ollama run llama2:7b-chat-q4_0 "你好,介绍一下你自己"

Ctrl+D可以退出对话。

(可选)第六步:配置环境变量

为了更方便地使用Ollama,我们可以设置一些环境变量。编辑.bashrc文件:

代码片段
nano ~/.bashrc

在文件末尾添加:

代码片段
# Ollama配置
export OLLAMA_HOST=0.0.0.0:11434    # Ollama服务监听地址和端口(默认11434)
export OLLAMA_MODELS=$HOME/.ollama/models # Ollama模型存储位置(默认~/.ollama/models)

保存后执行以下命令使配置生效:

代码片段
source ~/.bashrc

(可选)第七步:安装Web UI界面

如果你更喜欢图形界面操作,可以安装Open WebUI(原Ollamac Web UI):

  1. Docker方式安装(推荐):
代码片段
docker run -d --network=host -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main 
  1. Podman方式安装(Fedora默认容器引擎):
代码片段
podman run -d --network=host -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main 

访问地址:

代码片段
http://localhost:8080 

(可选)第八步:添加更多模型

Ollama支持多种开源大语言模型。以下是几个常用模型的拉取命令:

  1. Llama3系列:

    代码片段
    ollama pull llama3:8b-instruct-q4_0   # Llama3小尺寸版(8B参数)
    ollama pull llama3:70b-instruct-q4_0 # Llama3大尺寸版(70B参数)
    
  2. Mistral系列:

    代码片段
    ollama pull mistral:7b-instruct-v0.1-q4_0 # Mistral7B指令调优版 
    
  3. Gemma系列:

    代码片段
    ollama pull gemma:2b-instruct-q4_0 # Google Gemma小尺寸版(2B)
    

(可选)第九步:硬件加速配置

如果你的电脑有NVIDIA显卡,可以配置CUDA加速:

  1. 首先确认显卡驱动已安装:

    代码片段
    nvidia-smi  
    
  2. Ollamac会自动检测CUDA环境。如果没有检测到:
    1) 安装NVIDIA驱动
    2) 安装CUDA Toolkit

  3. AMD显卡用户可以使用ROCm:
    1) 启用RPMFusion仓库
    2) 安装ROCm

(可选)第十步:性能优化设置

对于性能调优,可以编辑配置文件~/.ollamarc:

代码片段
# Ollamac性能优化配置示例 

# GPU相关设置 (如果有NVIDIA显卡)
nvidia.enable = true  
nvidia.max_threads = auto  

# CPU相关设置  
cpu.max_threads = auto  
cpu.priority = high  

# RAM相关设置  
memory.limit = "80%"  

# Cache设置  
cache.size = "10GB"  
cache.path = "/tmp/ollamac_cache"  

# API服务器设置  
api.host = "127.0.0.1"  
api.port = "11434"  

# WebUI设置 (如果安装了WebUI)  
web.enable = true  
web.host = "127.0.0.1"  
web.port = "8080"  
web.auth = false  

修改后需要重启服务生效:

代码片段
systemctl restart ollamac.service  

(可选)第十一步:防火墙配置 (如果需要远程访问)

如果你需要通过其他设备访问本机的Ollamac服务:

代码片段
sudo firewall-cmd --permanent --add-port=11434/tcp     # API端口 
sudo firewall-cmd --permanent --add-port=8080/tcp      # WebUI端口 (如果安装了)   
sudo firewall-cmd --reload                             #重新加载防火墙规则   

安全警告:
这样会使你的AI服务暴露在局域网中。建议:
1) 至少设置密码认证 (web.auth=true)
2) 最好结合VPN或SSH隧道使用


常见问题解决

Q1: ollamac命令找不到?

A:
1) 检查PATH:

代码片段
echo $PATH | grep /usr/local/bin    

如果没有输出,添加路径到.bashrc:

代码片段
export PATH=$PATH:/usr/local/bin    
source ~/.bashrc    

2) 重新登录终端


Q2: GPU没有被识别?

A:
1) 检查驱动:

代码片段
nvidia-smi     # NVIDIA用户    
rocminfo       # AMD用户     
clinfo         # Intel用户     

如果没有输出,先正确安装驱动

2) 检查容器权限:
如果是Docker/Podman运行,确保添加了GPU参数:

代码片段
--gpus all     # Docker    
--device /dev/kfd --device /dev/dri     # Podman     

Q3: RAM不足导致崩溃?

A:
1) 减小线程数:
编辑.ollamarc,降低线程数:

代码片段
cpu.max_threads = <你CPU核心数的一半>    
nvidia.max_threads = <你GPU流处理器数的10%>     

2) 使用更小模型:
例如从70B换成7B版本


Q4: WebUI无法连接?

A:
1) 检查服务状态:

代码片段
systemctl status ollamac     
docker ps      #或 podman ps     

确保所有相关服务都在运行

2) 检查端口冲突:

代码片段
ss -tulnp | grep '8080\|11434'     
netstat -tulnp | grep '8080\|11434'     

如果有冲突,修改配置文件中的端口号


Q5: API响应慢?

A:
尝试以下优化方法:
1) 启用量化模型(如选择q4_0而不是f16版本):

代码片段
ollamac pull <model>:q4_0     

2) 调整prompt长度(太长的prompt会显著降低速度):
保持提问简洁


Q6: OOM(内存不足)?

A:
1) 限制内存使用(在.ollamarc中):

代码片段
memory.limit = "60%"      
cache.size = "5GB"      

2) 关闭不必要的应用,释放更多RAM


(高级技巧)

(技巧一) : Ollamac作为系统服务

如果你希望将某个特定模型的API作为长期运行的微服务:

创建自定义systemd服务文件 /etc/systemd/system/ollamac-mistral.service:

代码片段
[Unit]       
Description=Ollamac Mistral API Service       
After=network.target       

[Service]       
ExecStart=/usr/local/bin/ollamac serve mistral:7b-instruct-v0.1-q4_0       
User=ollamac       
Group=ollamac       
Restart=always       
RestartSec=5       

[Install]       
WantedBy=multi-user.target       

然后启用它:

代码片段
sudo systemctl daemon-reload      
sudo systemctl enable ollamac-mistral      
sudo systemctl start ollamac-mistral      
journalctl -u ollamac-mistral -f      #查看日志      

(技巧二) : API调用示例

你可以通过HTTP API与运行的模型交互:

cURL示例:

代码片段
curl http://localhost:11434/api/generate -d '{        
    "model": "mistral",        
    "prompt": "为什么天空是蓝色的?",        
    "stream": false        
}'        

Python示例:

代码片段
import requests        

response = requests.post(        
    'http://localhost:11434/api/generate',        
    json={            
        'model': 'mistral',            
        'prompt': '解释量子计算的基本概念',            
        'stream': False            
    }            
).json()             

print(response['response'])            

(技巧三) : Prompt工程建议

为了获得更好的回答质量:

DOs:

明确具体:”用300字解释光合作用,面向高中生”
分步骤请求:”第一步…,第二步…”
提供示例:”像这样写一首诗:[示例]”

DONTs:

过于宽泛:”告诉我关于科学的一切”
模糊不清:”那个东西怎么样?”
矛盾指令:”简短但详细的回答…”


(技巧四) : RAG应用开发

结合向量数据库实现知识增强生成(Retrieval-Augmented Generation):

1️⃣ Chroma集成示例:

代码片段
from chromadb import Client        

chroma_client = Client()        
collection = chroma_client.create_collection("knowledge")        

#存储文档片段        
collection.add(        
    documents=["文档内容..."],         
    metadatas=[{"source": "my_data"}],         
    ids=["doc001"]         
)        

#检索相关片段        
results = collection.query(query_texts=["查询内容"], n_results=3)        

#将检索结果作为上下文提供给LLM        
response = requests.post(        
    'http://localhost:11434/api/generate',         
    json={            
        'model': 'mistral',            
        'prompt': f'基于以下上下文回答问题:{results}\n\n问题:[你的问题]',            
        'stream': False            
    }            
).json()             

print(response['response'])            


(技巧五) : Function Calling

通过特殊格式实现结构化输出:

Prompt模板:

代码片段
请严格按以下JSON格式回答,包含指定的字段值:

{{
    "answer": "[你的回答]",       
    "confidence": "[低/中/高]",       
    "follow_up": "[建议追问的问题]"       
}}       

问题:[你的问题]       

Python解析代码:

代码片段
import json        

try:        
    response_json = json.loads(response['response'])        
except json.JSONDecodeError as e:        
    print(f"解析错误:{e}")        
else:        
    print(f"答案:{response_json['answer']}")         
    print(f"置信度:{response_json['confidence']}")          

(技巧六) : LoRA微调

对现有模型进行轻量级微调以适应特定任务:

Step-by-Step指南:

1️⃣ [准备数据集] JSONL格式样本:

代码片段
{"text":"<用户输入>\n<期望输出>"}       
{"text":"...\n..."}       
...       

2️⃣ [创建适配器] :

代码片段
ollamac create my-adapter -m mistral \          
--template "[特殊指令]" \          
--data dataset.jsonl \          
--lora-r <秩> \          
--lora-alpha <比例> \          
--epochs <轮次>           

3️⃣ [使用适配器] :

代码片段
ollamam run my-adapter:[原模型名] "[输入]"           

(技巧七) : OpenTelemetry集成

监控API调用指标和日志:

Python代码示例:

代码片段
from opentelemetry import trace          
from opentelemetry.sdk.trace import TracerProvider          
from opentelemetry.sdk.resources import Resource          

trace.set_tracer_provider(TracerProvider(resource=Resource.create({"service.name":"my-ai-app"})))          

tracer = trace.get_tracer(__name__)          

with tracer.start_as_current_span("generate-response"):          
    response = requests.post('http://localhost...')           

print(f"TraceID:{trace.get_current_span().get_span_context().trace_id}")           

(技巧八) : CI/CD自动化测试

在GitHub Actions中添加LLM输出验证测试:

.github/workflows/test.yml片段:
““yaml
steps:
– name: Run Test Query
run:|
curl http://localhost… | tee response.json
jq ‘.response’ response.json > actual.txt

  • name: Validate Output
    run:|
    MINLENGTH=$(wc -m < expected.txt | xargs echo $(( $(cat actual.txt | wc -m ) >= $MINLENGTH )) || exit $?
    grep -qE “$KEYWORDREGEX” actual.txt || exit $?
    diff expected.txt actual.txt || exit $?
    env:
    KEYWORD
    REGEX=”重要关键词|另一个关键词|.模式.

continue-on-error=true

if:${{ always() }}

post-if:${{ failure() }}

run:|

echo::warning::Validation failed but continuing…

echo::set-output name=failed::true

fi
${{ steps.validate.outputs.failed }} && echo::warning::Consider updating expected outputs
${{ steps.validate.outputs.failed }} && echo::set-env name=TESTS_FAILED::true
${{ steps.validate.outputs.failed }} && exit //非关键步骤允许失败
${{ steps.validate.outputs.failed }} && exit //关键步骤失败则停止
fi


通过本教程,你应该已经掌握了在Fedora39上部署和生产环境中使用Ollamam的全部关键技能。从基础安装到高级应用开发,这些内容覆盖了大多数实际应用场景。

如需进一步学习,推荐参考以下资源:
官方文档 ——最权威的技术参考手册
HuggingFace社区 ——获取最新开源LLM和微调技术
LangChain框架 ——构建复杂AI应用的强大工具链

Happy coding! 🚀

原创 高质量