Linux脚本和脚本知识

PHPer 2018-01-16 2426 0 1

整理下这方面的知识,特别是以后可能会用到的。慢慢更新。Linux下自动监测并重启Apache服务脚本

整理下这方面的知识,特别是以后可能会用到的。慢慢更新。202180116
...

立即注册

更新于:2022-05-25 23:54:13
    您需要登录后才可以评论。 立即注册

    一键安装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)(国语) 精彩片段

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?