Getting Start for xNVMe

本文详细介绍了为xNVMe项目准备构建工具链所需的步骤,包括更新到最新GCC、安装CMake、glibc等依赖项,确保系统满足C11标准及线程支持,并提供了一系列适用于Ubuntu 18.04的安装指导。

Please to see xNVME

Prepare Toolchain

The toolchain (compiler, archiver, and linker) used for building xNVMe must support C11, pthreads and on the system the following libraries and tools must be available:

  • glibc (>= 2.28, for io_uring/liburing)
  • libaio-dev (>=0.3, For xNVMe and SPDK)
  • libnuma-dev (>=2, For SPDK)
  • libssl-dev (>=1.1, For SPDK)
  • make (gmake)
  • meson (>=0.48, for SPDK)
  • ninja (>=, for SPDK)
  • uuid-dev (>=2.3, For SPDK)

Step 1 :update to latest gcc

sudo apt update
sudo apt install build-essential
sudo apt install gcc

you can see:
在这里插入图片描述

check the gcc version:
gcc --version

在这里插入图片描述

Step 2: Install CMake (>= 3.9, For xNVMe)

 check the CMake version 
 cmake --version

在这里插入图片描述

So, I should update CMake <=3.9 version
Sometimes just install cmake by the command via
sudo apt install cmake
if you meet errors like that:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package CMake

solution for Ubuntu 18.04 Bionic is :

wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
sudo apt-get update
sudo apt install cmake

install the latest cmake version

sudo apt remove cmake
pip install cmake --upgrade

you wiil see:
在这里插入图片描述

NOW: Install cmake3.9.2 in ubuntu18.04

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz
tar -xvf cmake-3.9.2.tar.gz
cd cmake-3.9.2
./configure
sudo make && make install

Check current Cmake version

hash -r
cmake --version

You can see:
在这里插入图片描述

Step 3: Install glibc (>= 2.28, for io_uring/liburing)

check current glibc version:
ldd --version

在这里插入图片描述
By default, the highest version of GLIBC for Ubuntu 18.04 should 2.27

Step 4: Install glibc libaio-dev (>=0.3, For xNVMe and SPDK)

sudo apt-get update -y
sudo apt-get install -y libaio-dev 

在这里插入图片描述

Step 5: Install libnuma-dev (>=2, For SPDK)

sudo apt-get update -y
sudo apt-get install -y libnuma-dev 

在这里插入图片描述

Step 6: Install libssl-dev (>=1.1, For SPDK)

sudo apt-get update -y
sudo apt-get install -y libssl-dev

在这里插入图片描述

Step 7: Install make (gmake)

sudo apt update
sudo apt install make
sudo ln -s /usr/bin/make /usr/bin/gmake

在这里插入图片描述

Step 8: Install meson (>=0.48, for SPDK)

 sudo apt-get update -y 
 sudo apt-get install -y meson 

在这里插入图片描述
Install meson from 0.45 to 0.48 or higher

sudo apt update
sudo apt install nasm
sudo apt install python3
sudo apt install python3-pip
pip3 install meson ninja

在这里插入图片描述
but!!! make error
While I can install with pip3 and it does indicate that it successfully installs 0.58.1
在这里插入图片描述
Reason:the newest meson is in the path~/.local/bin

Solution:

sudo ln -si /home/kathy-ub18/.local/bin/meson /usr/bin/meson

Step 9: Install uuid-dev (>=2.3, For SPDK)

sudo apt update
sudo apt install uuid-dev

在这里插入图片描述

解决深度学习模型中的灾难性遗忘(Catastrophic Forgetting)问题,通常需要结合模型结构、训练策略以及学习机制的优化。以下是一些主流方法: ### 1. 参数正则化方法(Parameter Regularization) 这种方法通过对模型参数的更新进行限制,使得模型在学习新任务时不会过度改变对旧任务重要的参数。例如,Elastic Weight Consolidation (EWC) 通过识别对旧任务至关重要的参数,并在更新时施加更高的惩罚,从而减少对旧任务性能的影响 [^4]。 ### 2. 动态网络扩展(Dynamic Network Expansion) Progressive Neural Networks(PNN)是一种典型的动态扩展方法。每当学习新任务时,模型会增加一个新的网络列(column),并利用之前任务的中间层输出作为新任务的输入。这样可以避免对原有任务的参数进行修改,同时利用已有知识提升新任务的学习效果 [^2]。 ### 3. 重放机制(Replay Mechanism) 重放机制通过在训练新任务时,保留一部分旧任务的数据或生成旧任务的样本,以帮助模型复习旧知识。例如,使用生成对抗网络(GAN)来生成旧任务的样本,或者直接存储一部分旧数据用于后续训练 [^1]。 ### 4. 知识迁移与迁移学习(Knowledge Transfer & Transfer Learning) 迁移学习是一种有效的策略,特别是在终身学习(Life Long Learning)场景下。通过在一个大型数据集上进行预训练,模型可以学习到通用的特征表示,然后在特定任务的小型数据集上进行微调。这种方法能够利用已有知识提升新任务的表现,同时减少对旧任务的遗忘 [^2]。 ### 5. 基于神经科学启发的学习机制(Neuroscience-Inspired Learning) 受到哺乳动物大脑皮层连续学习机制的启发,研究发现大脑通过降低某些突触的可塑性来巩固已学知识。在人工神经网络中,可以识别对旧任务重要的神经元,并降低其权重在后续任务训练中的变化幅度,从而保留旧知识 [^3]。 ### 6. 知识蒸馏(Knowledge Distillation) 知识蒸馏是一种将旧任务模型的知识迁移到新任务模型中的方法。通过使用旧模型对新任务数据进行预测,并将这些预测结果作为新模型的软标签,可以帮助新模型在不遗忘旧任务的情况下学习新任务 [^1]。 ### 7. 多任务联合训练(Multi-Task Joint Training) 在某些情况下,模型可以同时学习多个任务,而不是按顺序学习。通过共享底层表示并为每个任务设计独立的头部,模型可以在不遗忘旧任务的情况下学习新任务。这种方法在任务之间存在共享特征时特别有效 [^2]。 ### 示例代码:Elastic Weight Consolidation (EWC) 以下是一个简化的EWC实现思路,用于限制参数更新: ```python import torch import torch.nn as nn import torch.optim as optim class EWC: def __init__(self, model, dataloader, device): self.model = model self.dataloader = dataloader self.device = device self.params = {n: p for n, p in self.model.named_parameters() if p.requires_grad} self.fisher = self.calculate_fisher() def calculate_fisher(self): fisher = {} for n, p in self.params.items(): fisher[n] = torch.zeros_like(p.data) self.model.train() for inputs, targets in self.dataloader: inputs, targets = inputs.to(self.device), targets.to(self.device) self.model.zero_grad() outputs = self.model(inputs) loss = nn.CrossEntropyLoss()(outputs, targets) loss.backward() for n, p in self.params.items(): if p.grad is not None: fisher[n] += p.grad.data ** 2 / len(self.dataloader) return fisher def penalty(self): loss = 0 for n, p in self.model.named_parameters(): if n in self.fisher: loss += (self.fisher[n] * (p - self.params[n].data) ** 2).sum() return loss # 使用示例 model = ... # 定义模型 optimizer = optim.Adam(model.parameters(), lr=0.001) ewc = EWC(model, old_task_dataloader, device) for inputs, targets in new_task_dataloader: inputs, targets = inputs.to(device), targets.to(device) outputs = model(inputs) loss = nn.CrossEntropyLoss()(outputs, targets) + ewc.penalty() optimizer.zero_grad() loss.backward() optimizer.step() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值