介绍一个可以白嫖GPU资源的网站
如果需要微调一个大模型,GPU资源是必不可少的,但是对于个人玩家来说,肯定是能不花钱就不花钱的。这里
介绍一个可以白嫖GPU资源的网站,Kaggle。Kaggle是一个在线机器学习平台,提供了免费的GPU资源,每周可以
白嫖30个小时的GPU资源。
下边,我们就以一个简单的例子,来介绍一下如何在Kaggle上白嫖GPU资源。
部署DeepSeek-R1
1、在Kaggle上创建一个项目
项目代码编辑器是Jupyter Notebook.
初始的项目代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files
#under the input directory
import os
for dirname, _, filenames in os. walk('/kaggle/input' ):
for filename in filenames:
print(os. path. join(dirname, filename))
# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved
#as output when you create
#a version using "Save & Run All"
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of
#the current session
2、设置项目的环境
在菜单栏的Settings选项卡中,有三个选项:
a、Trun off internet : 代码执行过程中,需要不需要网络。
b、Accelerator: 选择需要的GPU资源。我们选择T4 * 2
c、Environment Preferences: 代码的运行环境,我们选择 Pin to original environment(2025-05-13),
这个会不断变化,大家根据自己情况选择。
在菜单栏的Add-ons选项卡中,有Secrets选项:是用来设置环境变量的。我设置了调用huggingface和wandb的2个密钥,
因为后边微调会用到。
如果要查看自己本周gpu资源还剩多少,点击右上角自己头像。
其它更多的设置,大家自己摸索。
3.部署deepseek-R1
1
2
3
4
### 安装微调工具unsloth
%% capture
! pip install unsloth
! pip install -- force- reinstall -- no- cache- dir -- no- deps git+ https:// github. com/ unslothai/ unsloth. git
1
2
3
4
5
6
7
### 登录huggingface,因为我们要下载huggingface上的模型或者训练库
from huggingface_hub import login
from kaggle_secrets import UserSecretsClient
user_secrets = UserSecretsClient()
hf_token = user_secrets. get_secret("HF_TOKEN" )
login(hf_token)
1
2
3
4
5
6
7
8
9
10
11
### 登录wandb,用于保存微调过程中的日志
import wandb
wb_token = user_secrets. get_secret("WB_TOKEN" )
wandb. login(key= wb_token)
run = wandb. init(
project= 'Fine-tune-DeepSeek-R1-Distill-Llama-8B on Medical COT Dataset' ,
job_type= "training" ,
anonymous= "allow"
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
###配置微调工具unsloth
from unsloth import FastLanguageModel
# 设置最大序列长度,表示模型在一次推理交互中,可以接受的最大token数
max_seq_length = 2048
# 定义数据类型,设置为None表示将自动选择合适的数据类型(通常根据环境或模型默认值决定)。
dtype = None
# 启用4位加载模式,可提高模型加载速度,但需要确保硬件支持4位精度。
load_in_4bit = True
model, tokenizer = FastLanguageModel. from_pretrained(
model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B" ,
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
### model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B",表示使用的model。这个模型需要是kaggle支持的。
### 具体参考 https://www.kaggle.com/models
### 如果我们调用的是huggingface上的模型,需要设置一个token参数,用于访问huggingface时的校验。
1
FastLanguageModel. for_inference(model) # 启用推理模式,优化模型的推理速度
运行成功,看结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
###测试模型是否正常
question = "请问如何证明根号2是无理数?" ## 先把问题用分词器 变为 数字,能让大模型理解的数字
inputs = tokenizer([question], return_tensors= "pt" ). to("cuda" )
## 模型进行推理
outputs = model. generate(
input_ids= inputs. input_ids,
max_new_tokens= 1200 ,
use_cache= True ,
)
##对推理进行进行解码,解码成我们能看得懂的文字
response = tokenizer. batch_decode(outputs)
##打印结果
print(response[0 ])
###输出内容:
< | begin▁ of▁ sentence| > 请问如何证明根号2是无理数? 这是一个经典的问题, 不过我需要详细地一步步思考。
首先, 我应该回顾一下什么是有理数和无理数。 有理数是可以表示为两个整数相除的数, 也就是说, a/ b, 其中a和b
是整数, 且b不等于0。 无理数则是不能表示为这样的形式的数。
那么, 根号2是否为有理数呢? 我记得根号2是无理数, 但需要证明这一点。
一种常见的证明方法是假设根号2是有理数, 然后导出矛盾, 从而证明它是无理数。
假设根号2是有理数, 那么根据定义, 存在整数a和b( 其中b不等于0), 使得:
√ 2 = a/ b
其中a和b是最简整数, 即没有公因数, 且分数无法再约分。
然后, 我们可以将这个等式两边同时平方, 得到:
(√ 2 )^ 2 = (a/ b)^ 2
也就是:
2 = a² / b²
接下来, 我们可以将等式两边同时乘以b², 得到:
2 b² = a²
这说明a²是2的倍数。 因为a²= 2 b², 那么a²必须是偶数, 因为它等于2乘以另一个整数b²。 那么, a²是偶数,
意味着a本身必须是偶数。 因为如果一个数的平方是偶数, 那这个数必须是偶数, 奇数的平方是奇数。
所以, 假设a是偶数, 那我们可以将a表示为2k, 其中k是一个整数。 那么, a= 2 k, 代入上式:
a² = (2 k)^ 2 = 4 k²
于是, 原来的等式2 = a² / b²变为:
2 = 4 k² / b²
然后, 两边同时乘以b², 得到:
2 b² = 4 k²
两边同时除以2, 得到:
b² = 2 k²
这说明b²也是2的倍数, 因此b也是偶数, 因为同样的道理, 如果一个数的平方是偶数, 那么这个数本身必须是偶数。
所以, 假设根号2是有理数, 那么a和b都是偶数, 存在公因数, 这与我们最初的假设矛盾, 因为我们假设a和b是最
简整数, 没有公因数。
因此, 假设根号2是有理数会导致矛盾, 所以根号2是无理数。
另一种思考方式是, 考虑任何有理数的平方都是有理数, 或者说, 如果一个数是有理数, 那么它的平方也是有理数。
反过来, 如果一个数是无理数, 那么它的平方可能是有理数或者无理数, 例如√ 2 的平方是2, 是有理数。
所以, 回到问题, 假设√ 2 = a/ b是最简形式, 那么a和b都是整数, 且互质, 即没有公因数。 然后平方两边,
得到2 = a² / b², 进而得到a² = 2 b², 这意味着a必须是偶数, 设为2k, 代入得4k² = 2 b², 即2k² = b²,
这意味着b也是偶数, 这与a和b互质矛盾, 因此√ 2 是无理数。
总结一下, 关键点在于假设√ 2 是有理数, 那么a和b都是偶数, 这与互质的条件矛盾, 所以√ 2 是无理数。
我觉得这个过程没有问题, 但为了确保万无一失, 我可以再检查一下是否有其他可能的证明方法, 或者是否有遗漏的点。
比如, 是否可以用数学归纳法或者其他方法来证明√ 2 是无理数? 不过我觉得上述的方法已经很直接了。
另外, 是否有可能用数论的方法, 比如考虑平方数和平方无关数的概念? 可能有点复杂, 不过我觉得基本的假设和推导
已经足够。
总之, 我的结论是, 根号2是无理数, 因为假设它是有理数会导致矛盾。
</ think>
根号2是无理数, 因为假设它是有理数会导致矛盾。 具体推理如下:
1. ** 假设** :√ 2 = a/ b, 其中a和b是互质的整数, 且b ≠ 0 。
2. ** 平方两边** : (√ 2 )² = (a/ b)² ⇒ 2 = a² / b²。
3. ** 整理等式** : 2 b² = a² ⇒ a² = 2 b²。
4. ** 分析a和b的奇偶性** :
- 因为a² = 2 b², a²是偶数, 所以a必须是偶数。 设a = 2 k, k为整数。
- 代入a = 2 k, 得(2 k)² = 4 k² = 2 b² ⇒ 2 k² = b²。
- 因此, b²也是偶数, b也必须是偶数。
5. ** 矛盾** : 既然a和b都是偶数, 说明它们有一个公因数2, 这与最初的假设( a和b互质) 矛盾。
6. ** 结论** : 因此,√ 2 是无理数。
整个推导过程十分严谨,以后用它来辅导我家孩子的小学和初中作业应该问题不大,下一节,我们正式开始微调一个大模型。
打赏
微信打赏
支付宝打赏