|-转 一键安装TiDB开发环境(centos7)
Tidb的安装工具是tiup
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh source .bash_profile
只要一个命令即可
tiup playground --db=2 --kv=3 --pd=3 --monitor
说明:
–db:多少个计算节点 (最少2个)
–kv:多少个存储节点(最少3个)
–pd:多少个管理节点 (PD:Placement Driver)(最少3个)
–monitor:开启监控,使用Prometheus+Grafana进行监控(1个即可)
关键字
TiDB、TiKV、Placement Driver (PD) 主要作用?
- TiDB 是 Server 计算层,主要负责 SQL 的解析、制定查询计划、生成执行器。
- TiKV 是分布式 Key-Value 存储引擎,用来存储真正的数据,简而言之,TiKV 是 TiDB 的存储引擎。
- PD 是 TiDB 集群的管理组件,负责存储 TiKV 的元数据,同时也负责分配时间戳以及对 TiKV 做负载均衡调度。
附整体架构
...
浏览更多内容请先登录。
立即注册
更新于:2022-05-25 23:56:37
|-转 执行sh脚本报错 /bin/bash^M: bad interpreter: No such file or directory
执行sh脚本报错 /bin/bash^M: bad interpreter: No such file or directory
这个 ^M 是关键!它表示:脚本是 Windows 格式(CRLF 换行)
Linux 只认 LF 换行,而 Windows 用 CRLF(\r\n),那个 ^M 就是 \r(回车符)。
所以系统试图找一个叫 /bin/bash^M 的解释器,但实际只有 /bin/bash,于是报错。...
浏览更多内容请先登录。
立即注册
更新于:2025-09-03 07:40:13
|-转 测试模型训练的小的python脚本
简单的一个测试脚本,用来测硬件做深度学习训练时的性能。
# train_simple.py
import torch
import time
from diffusers import UNet2DModel
from pathlib import Path
import platform
import psutil
# -----------------------------
# 1. 系统信息打印
# -----------------------------
def print_system_info():
print("? 系统信息检测中...")
cpu_name = platform.processor()
if not cpu_name:
try:
with open("/proc/cpuinfo", "r") as f:
for line in f:
if "model name" in line:
cpu_name = line.split(":")[1].strip().split(" @ ")[0]
break
except:
cpu_name = "Unknown CPU"
cpu_cores = psutil.cpu_count(logical=False)
cpu_threads = psutil.cpu_count(logical=True)
print(f"? CPU: {cpu_name} ({cpu_cores} 核 / {cpu_threads} 线程)")
memory = psutil.virtual_memory()
total_ram = memory.total / (1024**3)
available_ram = memory.available / (1024**3)
print(f"? 内存: {total_ram:.2f} GB 总计, {available_ram:.2f} GB 可用")
if torch.cuda.is_available():
gpu_count = torch.cuda.device_count()
print(f"? GPU: {gpu_count} 张可用 (CUDA)")
for i in range(gpu_count):
gpu_name = torch.cuda.get_device_name(i)
print(f" ? [{i}] {gpu_name}")
else:
print("? GPU: 未检测到 (CUDA 不可用)")
print("-" * 50)
print_system_info()
print("? 开始执行 UNet2DModel 分阶段训练测试...")
# -----------------------------
# 2. 全局计时开始
# -----------------------------
total_start_time = time.time()
# 创建模型(不指定设备)
model = UNet2DModel(
sample_size=32,
in_channels=3,
out_channels=3,
layers_per_block=1,
block_out_channels=(32, 64),
down_block_types=("DownBlock2D", "AttnDownBlock2D"),
up_block_types=("UpBlock2D", "AttnUpBlock2D"),
)
# 模拟数据
batch_size = 2
x_cpu = torch.randn(batch_size, 3, 32, 32)
y_cpu = torch.randn(batch_size, 3, 32, 32)
timesteps_cpu = torch.zeros(batch_size, dtype=torch.long)
# 显示模型参数量
def count_params(m):
return sum(p.numel() for p in m.parameters() if p.requires_grad)
print(f"? 模型参数量: {count_params(model):,}")
# 优化器(后面会重建)
optimizer = None
# -----------------------------
# 3. 阶段1:CPU 训练
# -----------------------------
print("? 开始 CPU 训练...")
cpu_start_time = time.time()
# 使用 CPU
model_cpu = UNet2DModel(
sample_size=32,
in_channels=3,
out_channels=3,
layers_per_block=1,
block_out_channels=(32, 64),
down_block_types=("DownBlock2D", "AttnDownBlock2D"),
up_block_types=("UpBlock2D", "AttnUpBlock2D"),
)
model_cpu.train()
model_cpu = model_cpu.to("cpu")
optimizer = torch.optim.Adam(model_cpu.parameters(), lr=1e-3)
n_steps = 10
for step in range(n_steps):
optimizer.zero_grad()
output = model_cpu(x_cpu, timesteps_cpu).sample
loss = torch.nn.functional.mse_loss(output, y_cpu)
loss.backward()
optimizer.step()
print(f"Step {step+1:2d} | Device: CPU | Loss: {loss.item():.6f}")
cpu_end_time = time.time()
cpu_elapsed = cpu_end_time - cpu_start_time
print(f"⏱️ CPU 训练耗时: {cpu_elapsed:.2f} 秒")
# -----------------------------
# 4. 阶段2:GPU 训练(如果可用)
# -----------------------------
gpu_elapsed = 0.0
if torch.cuda.is_available():
print("? 开始 GPU 训练...")
gpu_start_time = time.time()
model_gpu = UNet2DModel(
sample_size=32,
in_channels=3,
out_channels=3,
layers_per_block=1,
block_out_channels=(32, 64),
down_block_types=("DownBlock2D", "AttnDownBlock2D"),
up_block_types=("UpBlock2D", "AttnUpBlock2D"),
)
model_gpu.train()
device = torch.device("cuda")
model_gpu = model_gpu.to(device)
x_gpu = x_cpu.to(device)
y_gpu = y_cpu.to(device)
timesteps_gpu = timesteps_cpu.to(device)
optimizer = torch.optim.Adam(model_gpu.parameters(), lr=1e-3)
for step in range(n_steps):
optimizer.zero_grad()
output = model_gpu(x_gpu, timesteps_gpu).sample
loss = torch.nn.functional.mse_loss(output, y_gpu)
loss.backward()
optimizer.step()
print(f"Step {step+1:2d} | Device: GPU | Loss: {loss.item():.6f}")
gpu_end_time = time.time()
gpu_elapsed = gpu_end_time - gpu_start_time
print(f"⏱️ GPU 训练耗时: {gpu_elapsed:.2f} 秒")
else:
print("⚠️ GPU 不可用,跳过 GPU 训练阶段")
# -----------------------------
# 5. 保存模型(仅保存最后一次训练的模型)
# -----------------------------
save_dir = Path("output") / "test-unet-final"
save_dir.mkdir(parents=True, exist_ok=True)
# 保存 GPU 模型优先,否则保存 CPU
final_model = model_gpu if torch.cuda.is_available() else model_cpu
final_model.eval()
final_model.save_pretrained(save_dir)
print(f"? 模型已保存至: {save_dir.resolve()}")
# 清理命令
if platform.system() == "Windows":
delete_cmd = f'rd /s /q "{save_dir}"'
else:
delete_cmd = f'rm -rf "{save_dir}"'
print(f"? 清理命令(如需删除): {delete_cmd}")
# -----------------------------
# 6. 总耗时统计
# -----------------------------
total_end_time = time.time()
total_elapsed = total_end_time - total_start_time
print(f"✅ 总训练耗时: {total_elapsed:.2f} 秒")
print(f"? 详细耗时: CPU={cpu_elapsed:.2f}s, GPU={gpu_elapsed:.2f}s")
print("? 所有训练阶段完成!环境一切正常,可开始真实训练。")20250903...
浏览更多内容请先登录。
立即注册
更新于:2025-09-03 14:01:45
相关内容
说说国产电影
大陆电影《霸王别姬》到底如何?
周星驰的喜剧之王
真正的难忘,再说周星驰,《大话西游》两部曲
不得不提的《英雄本色》,一帮演员和剧组太给力了,当然导演厉害了!
2010年后的国产电影,看来除了《让子弹飞》其他都可以带过了?
《芳华》这样露大腿合适吗?
《国士无双》还是那么好看
算是知道花木兰那么多成本都花在哪了
评论《八佰》-为了照顾部分同学的逻辑思维能力,俺们通俗一把
【豆瓣评论】评《中国合伙人》
贺岁片 东成西就(1993)(国语) 精彩片段
推荐内容