LLM代码实现-Qwen(下载和调用)

LLM代码实现-Qwen(下载和调用)

基本介绍

Qwen 基础模型已经稳定训练了大规模高质量且多样化的数据,覆盖多语言(当前以中文和英文为主),Qwen 目前有多个版本:1.8B、7B、14B、72B,同时还开源了 Qwen-VL、Qwen-Audio 两款多模态模型。阿里可以算得上是业界良心,是目前唯一一家开源 72B 这个这个量级 Chat 版本模型的公司(智谱开源了 130B 的 GLM 可惜不是 Chat 版本),各模型特点和所需硬件条件如下:

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

环境配置

首先进入 Qwen 官方的 Github 拉取项目: 并安装相应依赖。

git clone https://github.com/QwenLM/Qwen.git

cd Qwen
pip install -r requirements.txt

模型下载

考虑到不是所有的读者都有足够的算力,本专栏使用 Qwen-1.8B-Chat(非基座模型)作为示例。Qwen 模型的下载方式挺多的,可以选择使用 [huggingface] 下载模型:

# 方式一:利用命令行下载
git lfs install
git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat

# 方式二:利用 python 代码下载
from modelscope import snapshot_download  
model_dir = snapshot_download('qwen/Qwen-1_8B-Chat', cache_dir="./model")

国内一般情况下由于网络原因用上述方案可能难以下载,也可以选择借助[魔搭社区]下载模型。

# 方式一:利用命令行下载
git lfs install
git clone https://www.modelscope.cn/qwen/Qwen-1_8B-Chat.git

# 方式二:利用 python 代码下载
#模型下载 
from modelscope import snapshot_download 
model_dir = snapshot_download('qwen/Qwen-1_8B-Chat', cache_dir="./model")

模型调用

这是简单的一种调用方式,使用 transformers 库进行调用,可以测试环境配置和模型下载是否正确:

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# 加载模型和 tokenizer
tokenizer = AutoTokenizer.from_pretrained("./model/Qwen/Qwen-1_8B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    "./model/qwen/Qwen-1_8B-Chat",
    device_map="auto",
    trust_remote_code=True
).eval()

# 配置模型参数
model.generation_config = GenerationConfig.from_pretrained("./model/Qwen/Qwen-1_8B-Chat", trust_remote_code=True)

# 获取模型输出并返回历史记录
response, history = model.chat(tokenizer, "你好", history=None)
print(response)

其中 device_map 用于设置调用模型的设备, 可以选择"cpu", “auto”, “balanced”, “balanced_low_0”, “sequential”:

# "auto" 和 "balanced" 将会在所有的 GPU 上平衡切分模型,那么可以计算批尺寸大于 1 的输入
# "balanced_low_0" 会在除了第一个 GPU 上的其它 GPU 上平衡划分模型,并且在第一个 GPU 上占据较少资源。这个选项符合需要在第一个 GPU 上进行额外操作的需求,例如需要在第一个 GPU 执行 generate 函数(迭代过程)。
# "sequential" 按照GPU的顺序分配模型分片,从 GPU 0 开始,直到最后的 GPU(那么最后的 GPU 往往不会被占满,和"balanced_low_0"的区别就是第一个还是最后一个,以及非均衡填充)

# 同时可以利用 accelerate 库的 infer_auto_device_map 函数自己设置每个设备上最大占用多少显存或内存

from accelerate import infer_auto_device_map

device_map = infer_auto_device_map(model, max_memory={0: "10GiB", 1: "10GiB", "cpu": "30GiB"})
print(model.hf_device_map)

同时官方推荐显卡支持 fp16 或 bf16 精度的用户安装 flash-attention 以提高运行效率并降低显存占用:

git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 下方安装可选,安装可能比较缓慢。
# pip install csrc/layer_norm
# 如果flash-attn版本高于2.1.1,下方无需安装。
# pip install csrc/rotary

GenerationConfig 中可以配置多种参数以控制模型输出(也可以不写以调用默认参数):

# temperature:控制生成文本的多样性。较高的温度值(例如1.0)会使生成的文本更加随机,而较低的温度值(例如0.2)会使生成的文本更加确定性。
# top_k:控制生成文本时,模型会考虑的最高概率的词的数量。较小的top_k值会限制模型只考虑概率最高的几个词,从而增加生成文本的多样性。
# top_p:控制生成文本时,模型会考虑的累积概率的阈值。较小的top_p值会限制模型只考虑累积概率高于阈值的词,从而增加生成文本的多样性。
# repetition_penalty:用于抑制生成文本中重复词语的参数。较大的repetition_penalty值会降低重复词语的概率。
# do_sample:指示模型是否使用采样方法生成文本。当设置为True时,模型会根据概率分布随机选择下一个词语;当设置为False时,模型会根据概率分布选择概率最高的词语。
# pad_token_id:用于填充序列的特殊标记的ID。
# eos_token_id:用于表示输入序列结束的特殊标记的ID。
# min_new_tokens:生成文本时,要求至少生成的新词语数量。
# max_new_tokens:生成文本时,要求最多生成的新词语数量。

model.generation_config = GenerationConfig.from_pretrained(
    temperature=0.8, 
    top_k=5, 
    repetition_penalty=1.2,
    do_sample=True, 
    return_unused_kwargs=True
)

以下实现了一个多轮对话的脚本,可以更方便地进行模型性能测试(输入"clc"后可清空历史聊天记录),同时可以设置系统提示词指定模型行为模式:

from transformers import AutoModelForCausalLM, AutoTokenizer
import os

class Qwen:
    def __init__(self):
        path = "./model/Qwen/Qwen-1_8B-Chat"

        self.tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)
        self.model = AutoModelForCausalLM.from_pretrained(
            path,
            device_map="auto",
            trust_remote_code=True
        ).eval()

    def clear_screen(self):
        os.system('clear')
        return [], ""

    def chat_qwen(self, System_Prompt):
        history, history = self.clear_screen()

        while True:
            prompt = input("user:")
            if prompt.lower() == "clc":
                history, history = self.clear_screen()
                continue
            # System Prompts 可以设定模型的行为模式,例如人物设定、语言风格、任务模式、甚至针对具体问题的具体行为。
            response, history = self.model.chat(self.tokenizer, prompt, history=history, system=System_Prompt)
            print("assistant:", response, end="\n\n")

if __name__ == '__main__':
    qwen = Qwen()
    qwen.chat_qwen(System_Prompt="请用外婆的语气和我说话")

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)
www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

4.LLM面试题和面经合集

这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

www.zeeklog.com  - LLM代码实现-Qwen(下载和调用)

Read more

Flutter 组件 string_stats 的鸿蒙化适配实战 - 驾驭极致文本分析大坝,实现 OpenHarmony 高性能文本审计、字符特征提取与工业级内容解析核

Flutter 组件 string_stats 的鸿蒙化适配实战 - 驾驭极致文本分析大坝,实现 OpenHarmony 高性能文本审计、字符特征提取与工业级内容解析核

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 string_stats 的鸿蒙化适配实战 - 驾驭极致文本分析大坝,实现 OpenHarmony 高性能文本审计、字符特征提取与工业级内容解析核 前言 随着鸿蒙(OpenHarmony)生态深入政企、金融与教育等核心领域,应用中对于“海量文本内容的高性能深度剖析”已经成为了保障系统稳健运行的第一道闸门。无论是实时监控系统中的日志关键词审计,还是编辑器应用中的多维度字符统计,如果开发者只是简单地使用 Dart 原生的字符串操作,在面对数十万乃至百万级别的长文本时,极易由于过度消耗主线程资源导致 UI 掉帧,甚至在重型计算时引发 ANR。 我们需要一种“冷血、精准、高通量”的文本特征提取机制。string_stats 库正是为了这种极致的字符属性审计而生的分析阵列。它通过高效的一阶遍历算法,能够秒级提取文本的行数、字数、高频词以及语法特征。适配到鸿蒙平台后,它不仅能为你的应用提供工业级的统计精度,更是我们构建“

By Ne0inhk
Flutter for OpenHarmony:blurhash_dart 优雅的图片加载占位符(提升视觉体验的黑科技) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:blurhash_dart 优雅的图片加载占位符(提升视觉体验的黑科技) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在移动应用中,图片加载是一个关键的体验点。网络环境不佳时,图片区域长时间显示白屏或灰底,用户体验非常割裂。 传统的做法是放一个 Loading 转圈或固定的占位图,但这种方式依然比较生硬。 BlurHash 是一种革命性的占位符技术。它将图片压缩成一段只有二三十个字符的短字符串。客户端只需要这段字符串,就能瞬间(< 1ms)在本地解码并渲染出一个模糊但色调与原图一致的占位图。 blurhash_dart 是该算法的 Dart 纯实现版本。对于 OpenHarmony 应用,这意味着你可以在不增加太多带宽成本的情况下,实现如丝般顺滑的各种图片加载过渡效果。 一、核心原理与效果 1.1 什么是 BlurHash? BlurHash 算法基于 离散余弦变换 (DCT),类似于 JPEG 的压缩原理,但它只保留最低频的颜色信息(Base83 编码)。 * 输入:

By Ne0inhk
Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter for OpenHarmony:Flutter 三方库 os_detect — 精准洞察鸿蒙系统的底层脉络(适配鸿蒙 HarmonyOS Next ohos) 在进行 Flutter for OpenHarmony 跨平台开发时,我们经常需要处理“差异化”的需求。有的功能可能只在真正的 OpenHarmony 原生环境下运行(如特定的 N-API 调用),而在 Web 或其他桌面模拟器环境下则需要进行降级处理。 传统的 Platform.isAndroid 或 kIsWeb 在处理日渐复杂的鸿蒙生态环境时,往往显得力不从心。os_detect 库提供了一套更轻量、更可靠的系统环境感知方案,能帮助我们精准识别应用正跑在哪个“灵魂”之下。 一、为什么需要系统环境检测?

By Ne0inhk
Flutter for OpenHarmony:dio_cookie_manager 让 Dio 发挥会话管理能力,像浏览器一样自动处理 Cookie 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:dio_cookie_manager 让 Dio 发挥会话管理能力,像浏览器一样自动处理 Cookie 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 在移动端开发中,我们通常使用 JWT (Authorization Header) 进行身份验证。但如果你的后端是基于 Session/Cookie 的老系统(如 PHP/Java JSP),或者你需要对接网页爬虫,那么 Cookie 的管理就变得至关重要。 dio 本身是不存储 Cookie 的。dio_cookie_manager 是一个官方推荐的拦截器,它结合 cookie_jar 库,能自动从响应头提取 Set-Cookie,并在下次请求时带上 Cookie,完全模拟浏览器的行为。 一、概念介绍/原理解析 1.1 基础概念 * CookieManager: Dio 的拦截器,

By Ne0inhk