微调Llama3实现在线搜索引擎和RAG检索增强生成功能

视频中所出现的代码 Tavily Search+RAG

微调Llama3实现在线搜索引擎和RAG检索增强生成功能!打造自己的perplexity和GPTs!用PDF实现本地知识库_哔哩哔哩_bilibili

一.准备工作

1.安装环境

conda create --name unsloth_env python=3.10
conda activate unsloth_envconda install pytorch-cuda=12.1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformerspip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps trl peft accelerate bitsandbytes

 2.微调代码(要先登录一下)

huggingface-cli login

点击提示的网页获取token(注意要选择可写的)


#dataset https://huggingface.co/datasets/shibing624/alpaca-zh/viewerfrom unsloth import FastLanguageModel
import torchfrom trl import SFTTrainer
from transformers import TrainingArgumentsmax_seq_length = 2048 # Choose any! We auto support RoPE Scaling internally!
dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+
load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False.# 4bit pre quantized models we support for 4x faster downloading + no OOMs.
fourbit_models = ["unsloth/mistral-7b-bnb-4bit","unsloth/mistral-7b-instruct-v0.2-bnb-4bit","unsloth/llama-2-7b-bnb-4bit","unsloth/gemma-7b-bnb-4bit","unsloth/gemma-7b-it-bnb-4bit", # Instruct version of Gemma 7b"unsloth/gemma-2b-bnb-4bit","unsloth/gemma-2b-it-bnb-4bit", # Instruct version of Gemma 2b"unsloth/llama-3-8b-bnb-4bit", # [NEW] 15 Trillion token Llama-3
] # More models at https://huggingface.co/unslothmodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit",max_seq_length = max_seq_length,dtype = dtype,load_in_4bit = load_in_4bit,# token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf
)model = FastLanguageModel.get_peft_model(model,r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128target_modules = ["q_proj", "k_proj", "v_proj", "o_proj","gate_proj", "up_proj", "down_proj",],lora_alpha = 16,lora_dropout = 0, # Supports any, but = 0 is optimizedbias = "none",    # Supports any, but = "none" is optimized# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long contextrandom_state = 3407,use_rslora = False,  # We support rank stabilized LoRAloftq_config = None, # And LoftQ
)alpaca_prompt = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.### Instruction:
{}### Input:
{}### Response:
{}"""EOS_TOKEN = tokenizer.eos_token # Must add EOS_TOKEN
def formatting_prompts_func(examples):instructions = examples["instruction"]inputs       = examples["input"]outputs      = examples["output"]texts = []for instruction, input, output in zip(instructions, inputs, outputs):# Must add EOS_TOKEN, otherwise your generation will go on forever!text = alpaca_prompt.format(instruction, input, output) + EOS_TOKENtexts.append(text)return { "text" : texts, }
passfrom datasets import load_dataset#file_path = "/home/Ubuntu/alpaca_gpt4_data_zh.json"#dataset = load_dataset("json", data_files={"train": file_path}, split="train")dataset = load_dataset("yahma/alpaca-cleaned", split = "train")dataset = dataset.map(formatting_prompts_func, batched = True,)trainer = SFTTrainer(model = model,tokenizer = tokenizer,train_dataset = dataset,dataset_text_field = "text",max_seq_length = max_seq_length,dataset_num_proc = 2,packing = False, # Can make training 5x faster for short sequences.args = TrainingArguments(per_device_train_batch_size = 2,gradient_accumulation_steps = 4,warmup_steps = 5,max_steps = 60,learning_rate = 2e-4,fp16 = not torch.cuda.is_bf16_supported(),bf16 = torch.cuda.is_bf16_supported(),logging_steps = 1,optim = "adamw_8bit",weight_decay = 0.01,lr_scheduler_type = "linear",seed = 3407,output_dir = "outputs",),
)trainer_stats = trainer.train()model.save_pretrained_gguf("llama3", tokenizer, quantization_method = "q4_k_m")
model.save_pretrained_gguf("llama3", tokenizer, quantization_method = "q8_0")
model.save_pretrained_gguf("llama3", tokenizer, quantization_method = "f16")#to hugging face
model.push_to_hub_gguf("leo009/llama3", tokenizer, quantization_method = "q4_k_m")
model.push_to_hub_gguf("leo009/llama3", tokenizer, quantization_method = "q8_0")
model.push_to_hub_gguf("leo009/llama3", tokenizer, quantization_method = "f16")

3.我们选择将hugging face上微调好的模型下载下来(https://huggingface.co/leo009/llama3/tree/main)

4.模型导入ollama

下载ollama

 导入ollama

FROM ./downloads/mistrallite.Q4_K_M.gguf
ollama create example -f Modelfile

二.实现在线搜索

1.获取Tavily AI API 

Tavily AI

export TAVILY_API_KEY=tvly-xxxxxxxxxxx

 2.install tavily-python

pip install tavily-python

3.运行app.py

#app.py
import warnings# Suppress only the specific NotOpenSSLWarning
warnings.filterwarnings("ignore", message="urllib3 v2 only supports OpenSSL 1.1.1+")from phi.assistant import Assistant
from phi.llm.ollama import OllamaTools
from phi.tools.tavily import TavilyTools# 创建一个Assistant实例,配置其使用OllamaTools中的llama3模型,并整合Tavily工具
assistant = Assistant(llm=OllamaTools(model="mymodel3"),  # 使用OllamaTools的llama3模型tools=[TavilyTools()],show_tool_calls=True,  # 设置为True以展示工具调用信息
)# 使用助手实例输出请求的响应,并以Markdown格式展示结果
assistant.print_response("Search tavily for 'GPT-5'", markdown=True)

 三.实现RAG

1.git clone https://github.com/phidatahq/phidata.git

2.phidata---->cookbook---->llms--->ollama--->rag里面 有示例和教程

修改assigant.py中的14行代码,将llama3改为自己微调好的模型

另外需要注意的是!!!

要将自己的模型名称加入到app.py里面的数组里

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

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

相关文章

周末总结(2024/05/25)

工作 人际关系核心实践: 要学会随时回应别人的善意。执行时间控制在5分钟以内 坚持每天早会打招呼 工作上的要点 现状(接受破烂现状,改变状态) - 这周使用和执行了生产环境发布流程(2天),2天时间在写Java…

大胆预测:计算机将要回暖

中概财报集体亮眼 虽然最近几天恒指(港股)稍有回落,但年线仍有 9% 的上涨。 过去三年,恒指分别下跌 14.08%、15.46% 和 13.82%。 而在近期,国内各大互联网都公布了财报,别看各个大厂的作妖不断,…

[前端|vue] v-if 和v-show的区别,为什么功能会类似

v-if 和 v-show 都是 Vue 中用于条件渲染的指令,但它们之间存在几个关键区别,这些区别导致了它们在不同场景下的适用性也有所不同: v-if 的特点: 条件渲染:v-if 是一个动态的条件渲染指令,它会根据表达式的…

dubbo复习:(8)使用sentinel对服务进行降级

一、下载sentinel-dashboard控制台应用并在8080端口启动 二、项目添加springboot 和dubbo相关依赖(降级规则并未持久化,如果需要持久化,如果需要持久化降级规则,只需增加nacos相关依赖并在nacos中进行配置,然后配置app…

会话机制:Session

1、什么是会话: 会话对应的英语单词:session 用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这个整个过程叫做:一次会话。会话在服务器端也有一个对应的java对象,这个java对象叫做&…

使用Python Tkinter创建GUI应用程序

大家好,当我们谈及使用Python Tkinter创建GUI应用程序时,我们涉及的不仅是技术和代码,更是关于创造力和用户体验的故事。Tkinter作为Python标准库中最常用的GUI工具包,提供了丰富的功能和灵活的接口,让开发者能够轻松地…

每日一题(4)——String连接,替换,比较,查找等

主要是一些字符串的连接, 替换,比较,去首尾空格,查找等操作; class ZiFu{public static void main(String []args){String s1"hello world";String s2new String("hello,world");s2" "…

Vue3判断变量和对象不为null和undefined

Vue3判断变量和对象不为null和undefined 一、判断变量二、判断对象 一、判断变量 在 Vue 3 中,你可以使用 JavaScript 提供的常规方式来检查变量是否不为 null 和不为 undefined。你可以分别使用严格不等运算符 ! 来比较变量是否不为 null 和不为 undefined。以下是…

【基于springboot+vue的房屋租赁系统】

介绍 本系统是基于springbootvue的房屋租赁系统,数据库为mysql,可用于日常学习和毕设,系统分为管理员、房东、用户,部分截图如下所示: 部分界面截图 用户 管理员 联系我 微信:Zzllh_

打开服务器远程桌面连接不上,可能的原因及相应的解决策略

在解决远程桌面连接不上服务器的问题时,我们首先需要从专业的角度对可能的原因进行深入分析,并据此提出针对性的解决方案。以下是一些可能的原因及相应的解决策略: 一、网络连接问题 远程桌面连接需要稳定的网络支持,如果网络连接…

金融业务及其他学习资料相关

目录 金融业务相关学习资料 道路交通安全考试科一学习资料(2023年版) 英语学习资料

ArcGIS提取含有计曲线的等高线

喜欢就关注我们吧! 今天我么来看看,如何利用DEM提取含有计曲线的等高线! 常规的话我们利用DEM提取的等高线都是不带计曲线的,无法把计曲线标注出来,今天我们就来看下,如何处理一下哦!提取带有计…

springboot打包目录解析

一、引言 Java开发中我们使用最多的便是spring框架,比如springboot应用。微服务模式下,每个服务都是一个springboot应用,都会被打包成一个可执行jar包。那么我们有多少人尝试去了解过这个可执行jar到底是什么?它的结构是什么样的…

2730. 找到最长的半重复子字符串(c++,滑动窗口)

给你一个下标从 0 开始的字符串 s ,这个字符串只包含 0 到 9 的数字字符。 如果一个字符串 t 中至多有一对相邻字符是相等的,那么称这个字符串 t 是 半重复的 。例如,0010 、002020 、0123 、2002 和 54944 是半重复字符串,而 00…

Homebrew安装、 Mac上pyenv的安装与使用,复制黏贴搞定,网上教程看得眼花缭乱的来看看,简单明了一步到胃!!

安装 Homebrew /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"安装pyenv brew install pyenv添加到终端使用的配置文件.zshrc、.bashrc 避免不必要的麻烦两个终端的配置文件都进行添加,文件在当前用户目…

第四十天 | 509.斐波那契数 70.爬楼梯 746.用最小花费爬楼梯

题目:509.斐波那契数 思路: 1.确定dp[i]含义:第i个斐波拉契数值为dp[i] 2.确定递推公式:dp[i] dp[i - 1] dp[i - 2] 3.dp数组如何初始化:d[0] 1, dp[1] 1 4.遍历顺序:从前向后 5.打印dp class Soluti…

C语言代码文件开头需要的代码

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>

泪目!网络连接中断的原因,终于找到了!

朋友们&#xff0c;出大事了&#xff01; 不知道多少朋友玩过 DNF 这个游戏&#xff0c;这个我从小学玩到大学的 “破” 游戏&#xff0c;昨天竟然出手游了&#xff01; 我都忘了自己曾几何时预约过这个手游通知&#xff0c;昨天给我发了条通知信息说游戏已开服。 老玩家直接…

Gitee好用的浏览器插件【GiteeTree】

使用gitee的时候&#xff0c;可能拉到别人的项目后&#xff0c;只是想看下某些文件的代码&#xff0c;但是不得不全部都拉下来&#xff0c;每次点又很麻烦。这个插件【GiteeTree】就很好用了&#xff0c;只需要搜索GiteeTree&#xff0c;然后把插件下载下来

git revert 和 git reset

文章目录 工作区 暂存区 本地仓库 远程仓库需求&#xff1a;已推送到远程仓库&#xff0c;想要撤销操作git revert &#xff08;添加新的提交来“反做”之前的更改&#xff0c;云端会残留上次的提交记录&#xff09;git reset&#xff08;相当于覆盖上次的提交&#xff09;1.--…