检查
1 | hx --health cpp |
1 | hx --health cpp |
1 | fdisk -l |
1 | fdisk /dev/sda |
2.1 创建分区
创建 /boot 分区
1 | (fdisk) n # 创建分区 |
创建 / 分区
1 | (fdisk) n # 创建分区 |
确认
1 | (fdisk) p # 重新打印分区,有新创建的两个分区 |
保存
1 | (fdisk) w |
1 | mkfs.fat -F32 /dev/sda1 # 格式化 /boot 分区(假设为 /dev/sda1) |
1 | mount /dev/sda2 /mnt # 挂载根分区 |
Ctrl + s
1 | brew install asdf |
1 | asdf plugin list all |
步骤如下。
1 | 1. 先添加 |
1 | 1. 查看已安装 plugins |
1 | 1. 查看已安装插件版本 |
设置插件版本
1 | asdf set {plugin-name} {plugin-version} # 固化插件版本到当前文件夹 |
演示
1 | ➜ tmp asdf set golang 1.20.4 |
如果当前目录下的 .tool-version
文件内有指定的版本,那么在当前目录下运行时(包含子目录)会使用.tool-version
内的版本。
1 | cargo |
Open Session
1 | zellij -s {sessioin-name} # open new session with name |
Attach
1 | zellij a {session-name} |
1 | enter search mode -> edit |
1 | enter locked mode |
报错信息
1 | 'xterm-kitty': unknown terminal type. |
解决方案
1 | append this into shell config file |
Arrow C++ 库由多个部分组成,每个部分完成不同的功能。
Memory management 抽象提供了统一的 API 来管理内存
Buffer 抽象表示物理数据的连续区域。
读写尽可能多的文件格式,比如 Parquet、CSV、Orc,以及 Arrow 专用的 Feather 格式。
文件系统抽象允许从不同的存储后端读取和写入数据,例如本地文件系统或 S3 存储桶
FunctionRegistry
)中,可以在其中按名称查找它们arrow::compute::CallFunctioni()
来调用arrow::compute::Add()
1 | arrow::compute::CallFunctioni("add", ...) 等价于 arrow::compute::Add(...) |
需要注意的是,一些函数还需要特定类型的参数(Options)。
1 | ScalarAggregateOptions scalar_aggregate_options; |
functions 可能会对输入进行隐式转换。
如果一个 Function 不支持一个输入类型,会返回 TypeError Status。
标量聚合操作操作在 (Chunked)Array、Scalar,产生单个输出值。
具体的聚合方法看这里。
组聚合方法通常无法直接调用,通常作为 SQL 类型 group by
操作,详见这里。
这类方法接受 Array 和 Scalar 作为输入。对于一元输入,输入是什么类型,输出就是什么类型。
两元输入时有如下的语义(在其他领域有时称为 broadcasting
比如 Numpy)。
更多。
Acero 是一个流查询引擎,用来制定和执行计算。
Arrow 使用 ExecPlan 来表示计算,ExecPlan 以零个或多个 Stream 作为输入,但输出只有一个 Stream。Plan 描述了数据怎么被转换、传递。
Acero 处理流式数据,Compute 处理内存中的数据。
ExecNode 是 Acero 中最基础的概念,ExecNode 有零个或多个输入,零或一个输出。如果没有 Source,称其为源;如果没有输出,称其为 Sink。ExecNode 还有多种类型。
批量数据(Batches of Data)使用 ExecBatch 类来描述。ExecBatch 是一个二维结构,和 RecordBatch 很相似。可以有零个或多个列,每个列必须有相同的长度。
1 | exec_batch.length : 数据行度 (row) |
RecordBatch 和 ExecBatch 对 Arrays 和 Buffers 都有强所有权。把 RecordBatch 转换为 ExecBatch 总是零拷贝的。但是 ExecBatch 转换为 RecordBatch 时只有在无标量(Scalar) 时才是零拷贝。
ExecPlan 表示由 ExecNode 组成的图。一个合法的 ExecPlan 必须由一个 Source 节点,但技术上不需要有 Sink 节点。ExecPlan 包含所有节点共享的资源,以及工具方法来启动、停止节点的执行。ExecPlan 和 ExecNode 都与单个执行的生命周期相关联。它们有状态,预计不可重新启动。
Declaration 是 ExecNode 的蓝图。声明可以组合成一个图表,形成 ExecPlan 的蓝图。
Acero 的基础工作流如下。
Substrait 是创建 Plan (Graph of Declaration)的推荐机制,原因如下。
以编程方式创建执行计划比从 Substra 创建计划更简单。Declaration::Sequence()
可以更方便地创建处理序列。
arrow::Table
arrow::RecordBatchReader
ExecPlan::Validate
EexcPlan::StartProducing
ExecPlan::finished
用作数据源。
对数据进行计算、转换、重塑。
重新排序、组合或切片数据流。
Sink 节点会结束一个 Plan。通常不需要创建 Sink Node,会基于 DeclarationToXyz 方法选择。
PushGenerator
JoinType
KernelState
KernelContext
KernelInitArgs
ScalarKernel
1 | // Function 帮助类 |
所有神经网络模块的基类,自定义的模型也应把该类作为基类。
1 | forward(*input) : 定义每次调用时的计算逻辑,所有子类都应该重写 |
提供了一种简单的方式来按顺序堆叠神经网络的层,用于快速构建一个顺序的神经网络模型。在模型进行前向传播时,nn.Sequential
会按照层的顺序依次调用每个层的forward
方法,将前一层的输出作为下一层的输入,直到最后一层输出结果。
local_rank = torch.distributed.get_rank() % torch.cuda.device_count()
计算(在每个机器进程数一致时)FeatureComputeContext 和 FeatureComputeExecContext 都是在 cpp 文件中进行定义。
1 | EmbeddingBagModule -> torch.nn.Module |
1 | EmbeddingSumConcat -> EmbeddingOperator -> torch.nn.Module |