本地部署deepseek-r1:7b模型

发布于:2025-02-11 ⋅ 阅读:(11) ⋅ 点赞:(0)

本地部署Deepseek

环境:win11 16G内存 NVIDIA GeForce RTX 2060显卡

安装Ollama

Tips:Ollama是一个用方便用户在本地机器上部署和运行大语言模型的工具

ollama官网下载传送门

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

默认的安装路径为c盘,这边修改为指定路径

修改方式:新增OLLAMA_MODELS的环境变量

在这里插入图片描述

验证是否修改成功,黑窗口中输入ollama

在这里插入图片描述

出现以上信息就说明安装成功了

拉取模型

结合我自己电脑的显卡,我这边搞个7b的版本

网上找的各种模型需要的显存大小作为参考

模型版本 显存大小
1.5b 4
7b、8b 8
14b 12
32b 24

拉取7b命令(后续重新进入和重新启动也可以用这个命令)

ollama run deepseek-r1:7b

7b文件大小有4.7G,可能要一会儿

在这里插入图片描述

ollama查看模型列表命令

ollama list

ollama查看正在运行的模型命令

ollama ps

停止正在运行的模型命令

ollama stop 模型名称

ollmam删除模型命令

ollama remove 模型名称

安装成功后就可以进行对话了

在这里插入图片描述

对话测试:

用Java写一个快速排序的算法

在这里插入图片描述

以下是回答的全部内容,感觉还是很快的,条理清晰

>>> 用Java写一个快速排序的算法
<think>
嗯,用户让我用Java写一个快速排序的算法。首先,我得确认用户的需求是什么。他们可能需要一个示例代码来理解如何实现快速排
序。

快速排序是分治算法,所以我要想到递归和选择基准元素的过程。首先,我得选择一个基准元素,通常可以选择数组的第一个元素、
最后一个或者中间那个作为基准。

接下来,我需要写一个partition函数,这个函数的作用是将数组分为两部分,左边小于等于基准,右边大于等于基准。这一步很重
要,因为它确定了左右区间的划分。

然后,递归地对左半部分和右半部分进行排序。这样,整个数组就会被快速排序完成。

在编写代码时,我得考虑参数类型、方法名以及处理边界情况,比如数组为空或者只有一个元素的情况。这些都是避免栈溢出和错误
的重要步骤。

最后,我要测试一下代码的正确性。可以写一个测试类,初始化一个整数数组,调用quickSort方法排序,然后打印结果看看是否正
确。

总之,我需要一步步构建快速排序算法,确保每个部分都清晰明了,并且能够处理各种情况。
</think>

以下是一个使用Java实现快速排序(Quick Sort)的示例代码:

```java
public class QuickSort {
    public static void main(String[] args) {
        int[] array = {12, 11, 13, 5, 6, 7};
        quickSort(array);
        System.out.println("Sorted array: ");
        for (int num : array) {
            System.out.print(num + " ");
        }
    }

    public static void quickSort(int[] array) {
        if (array.length <= 1) {
            return;
        }

        int pivotIndex = array.length / 2; // 选择中间元素作为基准
        int pivot = array[pivotIndex];

        // 分区操作
        int left = 0;
        int right = array.length - 1;

        while (left <= right) {
            // 找到大于基准的左边界
            while (left <= right && array[left] <= pivot) {
                left++;
            }

            // 找到小于基准的右边界
            while (left <= right && array[right] >= pivot) {
                right--;
            }

            if (left <= right) {
                // 交换元素
                int temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }

        // 递归排序左半部分和右半部分
        quickSort(array, 0, left - 1);
        quickSort(array, right + 1, array.length - 1);

    }

    public static void quickSort(int[] array, int left, int right) {
        if (left >= right) {
            return;
        }

        // 随机选择基准(可选)
        int pivotIndex = left + (right - left) * Math.random() % (right - left + 1);
        int pivot = array[pivotIndex];

        int i = left;
        int j = right;

        while (i <= j) {
            // 找到第一个大于基准的元素
            while (i <= j && array[i] < pivot) {
                i++;
            }

            // 找到最后一个小于基准的元素
            while (i <= j && array[j] > pivot) {
                j--;
            }

            if (i <= j) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }

        quickSort(array, left, i - 1);
        quickSort(array, j + 1, right);
    }
}
```

### 解释

1. **快速排序算法**:
   - 快速排序是一种分治算法,选择一个基准元素(pivot),将数组划分为两部分:左半部分的元素小于等于基准,右半部分的元素大于等于基准。
   - 使用递归对左右两个子数组进行排序。

2. **代码结构**:
   - `main` 方法初始化一个整数数组,并调用 `quickSort` 方法对其进行排序。
   - `quickSort` 方法有两个版本:一个接受整个数组,另一个接受子区间 `[left, right]`。默认情况下,第一个版本调用后会自动递归排序左右子数组。

3. **分区操作**:
   - 使用两个指针 `i` 和 `j` 分别从左到右和从右到左遍历数组。
   - 确保 `array[i] < pivot`(左指针移动)。
   - 确保 `array[j] > pivot`(右指针移动)。
   - 交换 `array[i]` 和 `array[j]`,直到 `i >= j`。

4. **基准选择**:
   - 基准选择为数组中间元素以减少极端情况的影响,同时也可以随机选择或固定选择最后一个元素作为优化策略。

### 注意事项

- 快速排序的时间复杂度为 \(O(n \log n)\),平均情况下表现优异。
- 在最坏情况下(如数组已经是有序的),时间复杂度退化为 \(O(n^2)\)。可以通过随机选择基准或使用更高级的分区技巧来优化。
- 对于大规模数据集,可以考虑使用归并排序或其他算法。

希望这个示例代码对您有所帮助!如果有任何问题,欢迎随时提出。

这是他回答一个年终报告是截取的电脑各部件信息

在这里插入图片描述