如何在windows 环境、且没有显卡的情况下用python跑通从ModelScope下载的大模型的调用

news2025/4/5 17:41:57

文章目录

  • 背景介绍
  • 源代码:
  • 安装调试过程
    • 1.设置第三方镜像源
    • 2.预先安装:
    • 3.在python中创建代码:
    • 4.最终修改程序,将device_map从“cuda”改成“auto”,大模型调用1.5B(1___5B)的
    • 5.最终跑出结果
      • 解释:
      • 示例:
  • 总结

背景介绍

在上AI训练营的课程时,老师提供了一段源码,目的是实现从modelscope下载DeepSeek-R1-Distill-Qwen-7B,并通过程序调用大模型,让大模型帮助生成二分查找法。
老师建议在网上租一台有GPU的电脑,推荐如下。

在这里插入图片描述
最终本人在自己的surface电脑上(Windows,无GPU)调通了该程序,并实现了功能。
我的电脑配置如下,
在这里插入图片描述

源代码:

#!/usr/bin/env python
# coding: utf-8

# In[1]:


from modelscope import AutoModelForCausalLM, AutoTokenizer
# model_name = "/root/autodl-tmp/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"
# model_name="C:\\Users\\Administrator\\AInewModels\\deepseek-ai\\DeepSeek-R1-Distill-Qwen-7B" #7B下载后跑不起来,所以改成1.5B
model_name="C:\\Users\\Administrator\\AInewModels\\deepseek-ai\\DeepSeek-R1-Distill-Qwen-1___5B"
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    # device_map="cuda" # auto(老师的源程序中是cuda,但是我的电脑没有显卡,因此改成auto)
    device_map="auto" 
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = "帮我写一个二分查找法"
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=2000
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)

安装调试过程

1.设置第三方镜像源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

2.预先安装:

(在不断出错中不断安装缺少的组件)
pip install modelscope
pip install setuptools
pip install transformers
安装torch

# CPU版本
pip install torch torchvision torchaudio

# GPU版本(需匹配CUDA版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

pip install ‘accelerate>=0.26.0’

3.在python中创建代码:

from modelscope import snapshot_download
snapshot_download('deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B',cache_dir="C:\\Users\\Administrator\\AInewModels")

运行它,模型下载到C:\Users\Administrator\AInewModels"

在这里插入图片描述

有一个warning

2025-04-04 13:39:40,696 - modelscope - WARNING - Failed to create symbolic link C:\Users\Administrator\AInewModels\deepseek-ai\DeepSeek-R1-Distill-Qwen-1.5B for C:\Users\Administrator\AInewModels\deepseek-ai\DeepSeek-R1-Distill-Qwen-1___5B.

中间有过报错,和CUDA有关。
AssertionError: Torch not compiled with CUDA enabled

4.最终修改程序,将device_map从“cuda”改成“auto”,大模型调用1.5B(1___5B)的

model_name="C:\\Users\\Administrator\\AInewModels\\deepseek-ai\\DeepSeek-R1-Distill-Qwen-1___5B"
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    # device_map="cuda" # auto
    device_map="auto" # auto
)

5.最终跑出结果

D:\PycharmProjects\PythonProject\AI0331.venv\Scripts\python.exe D:\PycharmProjects\PythonProject\AI0331\lecture02\3-deepseek-r1-7b使用.py
Sliding Window Attention is enabled but not implemented for sdpa; unexpected results may be encountered.
Setting pad_token_id to eos_token_id:151643 for open-end generation.
好,我现在需要帮用户写一个二分查找法。首先,我得理解用户的需求。用户可能是一个刚开始学习编程的学生,或者对算法感兴趣的人。他们可能需要一个简明的示例来理解二分查找法的实现。

二分查找法的时间复杂度是O(log n),适用于有序数组。所以,我应该包括一个示例代码,帮助用户直观地看到如何实现它。用户可能还希望了解代码的结构和各个部分的作用,比如low、high、mid的计算,以及循环的条件。

接下来,我需要考虑代码的结构。通常,二分查找法的代码会初始化low和high,然后在循环中不断调整mid的值,直到找到目标值或者确定不在数组中。同时,还需要处理找到和未找到的情况,返回相应的索引。

我应该使用清晰的变量名,比如low和high,分别表示数组的起始索引和结束索引。mid的计算方式应该是(low + high)//2,这样可以避免溢出。然后,比较target和arr[mid],如果相等,就返回mid;如果arr[mid]小于target,那么目标值在mid的右边,所以low更新为mid+1;否则,high更新为mid-1。循环的条件是low <= high。

此外,我还需要处理无法找到的情况,比如low > high,这时候返回-1。这样用户就能全面了解二分查找法的实现细节。

最后,我应该测试一下这个代码是否正确。比如,用一个简单的例子,比如数组[1,3,5,7,9],查找5,应该返回2。如果查找10,应该返回-1。这样用户可以验证代码是否正确。

总的来说,我需要写出一个完整的示例代码,解释各个部分的功能,并通过示例验证代码的正确性。这样用户不仅能理解算法,还能通过实际例子加深理解。

以下是一个简单的实现二分查找法的代码示例:

def binary_search(arr, target):
    low = 0
    high = len(arr) - 1
    while low <= high:
        mid = (low + high) // 2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

解释:

  1. 参数

    • arr:需要查找的有序数组。
    • target:需要查找的目标值。
  2. 初始化

    • low 初始值为数组的索引 0。
    • high 初始值为数组的最后一个索引(len(arr) - 1)。
  3. 循环条件

    • low <= high 时,继续循环查找。
  4. 计算中点

    • mid 计算为 (low + high) // 2,避免溢出。
  5. 比较和调整范围

    • 如果 arr[mid] 等于 target,返回 mid
    • 如果 arr[mid] 小于 target,则目标值在 mid 右侧,将 low 更新为 mid + 1
    • 否则,将 high 更新为 mid - 1
  6. 结束条件

    • low > high 时,说明目标值不在数组中,返回 -1

示例:

arr = [1, 3, 5, 7, 9]
target = 7

print(binary_search(arr, target))  # 输出:3

这个函数会返回数组中 7 的索引 3。如果 target 不在数组中,函数会返回 -1

Process finished with exit code 0

总结

由于本人用的surface 没有GPU卡,CPU 也不强劲,内存也不大。因此为了尝试调用本地的大模型模拟deepseek和人的对话和分析,只能调整程序,使用DeepSeek-R1-Distill-Qwen-1___5B 并将device_map从“cuda”改成=“auto”。

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

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

相关文章

黑马点评redis改 part 1

本篇将主要阐述短信登录的相关知识&#xff0c;感谢黑马程序员开源&#xff0c;感谢提供初始源文件&#xff08;给到的是实战第7集开始的代码&#xff09;【Redis实战篇】黑马点评学习笔记&#xff08;16万字超详细、Redis实战项目学习必看、欢迎点赞⭐收藏&#xff09;-CSDN博…

【Ragflow】11. 文件解析流程分析/批量解析实现

概述 本文继续对ragflow文档解析部分进行分析&#xff0c;并通过脚本的方式实现对文件的批量上传解析。 文件解析流程 文件解析的请求处理流程大致如下&#xff1a; 1.前端上传文件&#xff0c;通过v1/document/run接口&#xff0c;发起文件解析请求 2.后端api\apps\docum…

第三期:深入理解 Spring Web MVC [特殊字符](数据传参+ 特殊字符处理 + 编码问题解析)

✨前言&#xff1a;传参和状态管理&#xff0c;看似简单其实门道不少 在 Web 开发中&#xff0c;前端和后端最核心的交流方式就是“传参”&#xff0c;而“传参”除了涉及如何写代码获取参数&#xff0c;还藏着很多开发者容易忽略的细节&#xff1a; 为什么 URL 带了中文&…

Everything 安装教程与使用教程(附安装包)

文章目录 前言一、Everything 介绍二、Everything 安装教程1.Everything 安装包下载2.选择安装文件3.选择安装语言4.接受许可协议5.选择安装位置6.配置安装选项7.完成安装 三、Everything 使用教程1.启动软件2.简单关键词搜索3.按类型搜索 前言 在日常使用电脑时&#xff0c;随…

SQL语句(三)—— DQL

目录 基本语法 一、基础查询 1、查询多个字段 2、字段设置别名 3、去除重复记录 4、示例代码 二、条件查询 1、语法 2、条件列表常用的运算符 3、示例代码 三、分组查询 &#xff08;一&#xff09;聚合函数 1、介绍 2、常见的聚合函数 3、语法 4、示例代码 &…

Opencv计算机视觉编程攻略-第九节 描述和匹配兴趣点

一般而言&#xff0c;如果一个物体在一幅图像中被检测到关键点&#xff0c;那么同一个物体在其他图像中也会检测到同一个关键点。图像匹配是关键点的常用功能之一&#xff0c;它的作用包括关联同一场景的两幅图像、检测图像中事物的发生地点等等。 1.局部模板匹配 凭单个像素就…

汇编学习之《push , pop指令》

学习本章前线了解ESP, EBP 指令 汇编学习之《指针寄存器&大小端学习》-CSDN博客 栈的特点&#xff1a; 好比一个垂直容器&#xff0c;可以陆续放入物体&#xff0c;但是先放的物体通常会被后面放的物体压着&#xff0c;只有等上面后放的物品拿出来后&#xff0c;才能…

Python循环控制语句

1. 循环类型概述 Python提供两种主要的循环结构&#xff1a; while循环 - 在条件为真时重复执行for循环 - 遍历序列中的元素 2. while循环 基本语法 while 条件表达式:循环体代码示例 count 0 while count < 5:print(f"这是第{count1}次循环")count 13. f…

微信小程序(下)

目录 在事件处理函数中为 data 中的数据赋值 事件传参 bindinput 的语法格式 实现文本框和 data 之间的数据同步 条件渲染 结合 使用 wx:if hidden wx:if与 hidden 的对比 wx:for 手动指定索引和当前项的变量名 wx:key 的使用 WXSS 和 CSS 的关系 什么是 rpx 尺寸…

【零基础入门unity游戏开发——2D篇】2D 游戏场景地形编辑器——TileMap的使用介绍

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

vector的介绍与代码演示

由于以后我们写OJ题时会经常使用到vector&#xff0c;所以我们必不可缺的是熟悉它的各个接口。来为我们未来作铺垫。 首先&#xff0c;我们了解一下&#xff1a; https://cplusplus.com/reference/vector/ vector的概念&#xff1a; 1. vector是表示可变大小数组的序列容器…

ubuntu 22.04 解决LXC 报错CGroupV1 host system

解决CGroupV1 host system 报错 echo "cgroupv1 environment" sed -i s/^GRUB_CMDLINE_LINUX.*/GRUB_CMDLINE_LINUX_DEFAULT"quiet splash systemd.unified_cgroup_hierarchy0" / /etc/default/grub update-grub reboot 下载oracle 7 Linux 容器测试 l…

JavaEE初阶复习(JVM篇)

JVM Java虚拟机 jdk java开发工具包 jre java运行时环境 jvm java虚拟机(解释执行 java 字节码) java作为一个半解释,半编译的语言,可以做到跨平台. java 通过javac把.java文件>.class文件(字节码文件) 字节码文件, 包含的就是java字节码, jvm把字节码进行翻译转化为…

MINIQMT学习课程Day9

获取qmt账号的持仓情况后&#xff0c;我们进入下一步&#xff0c;如何获得当前账号的委托状况 还是之前的步骤&#xff0c;打开qmt&#xff0c;选择独立交易&#xff0c; 之后使用pycharm&#xff0c;编写py文件 导入包&#xff1a; from xtquant import xtdata from xtqua…

动态规划似包非包系列一>组合总和IIV

目录 题目分析&#xff1a;状态表示&#xff1a;状态转移方程&#xff1a;初始化填表顺序返回值&#xff1a;代码呈现&#xff1a; 题目分析&#xff1a; 状态表示&#xff1a; 状态转移方程&#xff1a; 初始化填表顺序返回值&#xff1a; 代码呈现&#xff1a; class Soluti…

Java 二叉树非递归遍历核心实现

非递归遍历的核心是用栈模拟递归的调用过程&#xff0c;通过手动维护栈来替代系统栈&#xff0c;实现前序、中序和后序遍历。以下是三种遍历的代码实现与关键逻辑分析&#xff1a; 一、二叉树遍历 1.1、前序遍历&#xff08;根 → 左 → 右&#xff09; 核心逻辑&#xff1a;…

【力扣hot100题】(052)课程表

什么人一学期要上2000节课啊jpg 看了非常久都没思路&#xff0c;主要是数据结构还没复习到图论&#xff0c;根本没思路怎么储存一个图…… 唯一记得的就是两种存储方法&#xff0c;一种是二维数组法&#xff0c;记录每一条边的有无&#xff0c;一种是只记录有的边&#xff0c…

SpringBoot配置文件多环境开发

目录 一、设置临时属性的几种方法 1.启动jar包时&#xff0c;设置临时属性 ​2.idea配置临时属性 3.启动类中创建数组指定临时属性 二、多环境开发 1.包含模式 2.分组模式 三、配置文件的优先级 1.bootstrap 文件优先&#xff1a; 2.特定配置文件优先 3.文件夹位置优…

RSA和ECC在密钥长度相同的情况下哪个更安全?

​现在常见的SSL证书&#xff0c;如&#xff1a;iTrustSSL都支持RSA和ECC的加密算法&#xff0c;正常情况下RAS和ECC算法该如何选择呢&#xff1f;实际上在密钥长度相同的情况下&#xff0c;ECC&#xff08;椭圆曲线密码学&#xff09;通常比RSA&#xff08;Rivest-Shamir-Adle…

Dive into Deep Learning - 2.4. Calculus (微积分)

Dive into Deep Learning - 2.4. Calculus {微积分} 1. Derivatives and Differentiation (导数和微分)1.1. Visualization Utilities 2. Chain Rule (链式法则)3. DiscussionReferences 2.4. Calculus https://d2l.ai/chapter_preliminaries/calculus.html For a long time, …