NFM System Configuration

本文档详细介绍了在Ubuntu环境下针对Netronome Flow Manager (NFM) 的调试过程及常见错误处理方法,包括如何编译测试文件、解决链接库文件缺失问题以及调整Jumbo frames设置等关键技术步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NFD endpoints:bind endpoint 1 on card 0 to CPU 6
root@ubuntu-PowerEdge-R720:/home/ubuntu# echo -n 6 > /sys/module/nfemsg_nfp/card0endpoint1_counters/cpu_bind
bash: echo: write error: Operation not permitted
操作失败!

编译测试文件,compile samples/nfm_sample_packet.c
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# gcc -Wall -W -I/opt/netronome/include -O2 \            
                                                               //-Wall -W 表示显示所有警告信息
                                                 //-Ixx增加目录xx,让编译器可以在xx下寻找头文件,-O进一步优化。
> -L/opt/netronome/lib -W1,-R/opt/netronome/lib \                  //-Lxx   表示增加目录xx,让编译器可以在xx下寻找库文件
//-Wl,表示后面的参数将传给link程序ld
> -W1,-rpath,/opt/netronome/lib -lnfm_packet -lnfm_error \                   //-lxx   表示动态加载libxx.so库
> -lpthread -lnfm_error -lnfm_log -lnfm_framework \
> -o nfm_sample_packet nfm_sample_packet.c                      //-o FILE     生成指定的输出文件。用在生成可执行文件时。
nfm_sample_packet.c: In function ‘main’:
nfm_sample_packet.c:289:20: warning: ‘start_us’ may be used uninitialized in this function [-Wmaybe-uninitialized]
       unsigned int us = end_us - start_us;
                    ^
/usr/bin/ld: cannot find -lnfm_packet
/usr/bin/ld: cannot find -lnfm_error
collect2: error: ld returned 1 exit status
出现错误!修改了nfm_sample_packet.c文件后,再编译一次
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# gcc -Wall -W -I/opt/netronome/include -O2 -L/opt/netronome/lib -Wl,-R/opt/netronome/lib -Wl,-rpath,/opt/netronome/lib -lnfm_packet -lnfm_error -lpthread -lnfm_error -lnfm_log -lnfm_framework -o nfm_sample_packet nfm_sample_packet.c
/usr/bin/ld: cannot find -lnfm_packet
/usr/bin/ld: cannot find -lnfm_error
collect2: error: ld returned 1 exit status
发现其他两个错误还是存在。
原因:在目录/opt/netronome/lib下确实没找到libnfm_packet和libnfm_error库文件

执行当前目录下makefile文件,显示如下:
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# make
gcc -o nfm_sample_log nfm_sample_log.c 
-Wall -W -I/opt/netronome/include -I/opt/netronome/include 
-O0 -g -ggdb -DDEBUG  -lnfp -lns_armctrl                             //-O0    不进行优化处理。  
  -g
        该选项可以利用操作系统的“原生格式(native format)”生成调试
        信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息
        -ggdb
        使 GCC 为 GDB 生成专用的更为丰富的调试信息,但是,此时就不能用其
        他的调试器来进行调试了 (如 ddx)
-L/opt/netronome/lib -L/opt/netronome/lib -lstdc++ 
-Wl,-R/opt/netronome/lib -Wl,-R/opt/netronome/lib  
-g -ggdb -lnfm -lpthread
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make: *** [nfm_sample_log] Error 1
存在错误。
原因:在目录/opt/netronome/lib下确实没找到libstdc++库文件

修改Jumbo frames,即改变数据帧的尺寸:
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# /opt/netronome/bin/nfm-initd.sh stop           //关闭NFM
Stopping Netronome Flow Manager:
**************  Stop NFM on Wed Jul  8 01:03:14 HKT 2015  ****************
--- Disabling traffic
Disabling traffic on NFE 0
--- Stopping NFM daemons on host
--- Stopping the NFM driver
--- Stopping the NFD drivers
--- Unloading the firmware on NFE 0
--- Establishing SSH communication with the ARM on NFE 0
--- Stopping daemons on the ARM on NFE 0
Stopping nfmmsgd: OK
Stopping tcammsgd: OK
**************  Stop complete on Wed Jul  8 01:03:23 HKT 2015  ****************
success.
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# vi /etc/netronome.conf                           //使用vi命令编辑netronome.conf  配置文件
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# /opt/netronome/bin/nfm-initd.sh start         //启动NFM
Starting Netronome Flow Manager: nfe_net                13309  0
    Attempting SSH to nvn0
Starting NFP 0 firmware /lib/firmware/nfm_app_nfp_no_tcam_jumbo.fw
success.

验证是否修改成功:
root@ubuntu-PowerEdge-R720:/opt/netronome/samples# /opt/netronome/bin/nfmconfig
nfe.present          = 1
ports.min            = 1
ports.max            = 2
nfe 0 ports.hw_min   = 0
nfe 0 ports.hw_max   = 1
ports.switch_tag     = 0 (off)
nfm.reuse_syn        = 1 (RESET)
nfm.lb_tuple         = TWO_TUPLE
nfm.lb_hash          = 0 (FLETCHER)
nfm.errored_packet   = 1 (DELIVER)
nfm.default_rule     = 1 (PASS)
nfm.valhalla_action  = 0x0000000000000000
nfm.mpls_depth       = 6
me version word      = 0x02070003
me revision word     = 0x00001e98
Microcode supports jumbo frames.                                //启动成功
发现修改成功!





NFM (Neural Factorization Machines) 是一种结合了矩阵分解和深度学习技术的推荐系统模型。它在PyTorch库中实现复现通常涉及以下几个步骤: 1. **安装依赖**:首先需要安装PyTorch库以及相关的数据处理和科学计算库,如NumPy、Pandas。 ```python pip install torch torchvision numpy pandas ``` 2. **理解基础**:熟悉神经网络和因子分解的基本原理,理解NFM模型结构,包括用户和物品的嵌入层、交互层、以及可能的全连接层。 3. **模型构建**:在PyTorch中创建一个NFM类,包含输入、嵌入层、交互矩阵生成、以及预测等函数。例如,可以使用`nn.Embedding`模块进行嵌入,然后通过点积运算生成交互矩阵。 ```python class NFM(nn.Module): def __init__(self, num_users, num_items, emb_dim, hidden_units): super(NFM, self).__init__() self.user_embedding = nn.Embedding(num_users, emb_dim) self.item_embedding = nn.Embedding(num_items, emb_dim) self.interaction_layer = nn.Linear(emb_dim * 2, emb_dim) # 二阶项 self.fc_layers = nn.Sequential(*[nn.Linear(emb_dim, unit) for unit in hidden_units] + [nn.Linear(hidden_units[-1], 1)]) def forward(self, users, items): user_vecs = self.user_embedding(users) item_vecs = self.item_embedding(items) interaction = torch.cat((user_vecs * item_vecs, user_vecs + item_vecs), dim=-1) interaction = F.relu(self.interaction_layer(interaction)) fc_out = self.fc_layers(interaction) return fc_out ``` 4. **训练与优化**:准备数据,比如用户-物品评分对,使用PyTorch的损失函数(如均方误差MSE)和优化器(如Adam)来训练模型。 5. **评估与验证**:通过交叉验证或预留部分数据进行模型性能评估,如计算准确率、AUC等指标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值