2009-11-02 本日学习总结

本文详细介绍了SAP系统的增强技术发展历程,从第一代基于源代码的增强到第四代SwitchFramework的发展,涵盖了BAdI、FieldExit、BTE等关键技术点,并对比了不同增强方式的特点。

本日学习总结:

 

关于T-CODE 的:

  1. se71 :格式绘制器
  2. co11n :工票输入
  3. se18 :initial screen for definitions 定义 BADI
  4. se19:initial screen for implenmentation
  5. se17 通用表
  6. se30: ABAP 运行时间分析

关于TABLE的:

  1. T134:物料类型
  2. TSTC: 事务代码表

关于方法:

  1. 物料类型被删除后: 增加回来放在表T134物料类型中
    data:itab like table of t134 with header line.
    itab-mtart = 'gaga'.
    append itab.
    modify t134 from table itab.
  2. 除去小数点后面的0:
    DATA: pd TYPE p LENGTH 8 DECIMALS 4,
             cd TYPE c LENGTH 20.
    pd = '1.23'.
    *WRITE pd TO cd NO-SIGN.
    cd = pd.
    SHIFT cd RIGHT DELETING TRAILING ' '.
    SHIFT cd RIGHT DELETING TRAILING '0'.
    WRITE cd.

关于概念:

 

   SAP 增强已经发展过几代了,建议你系统学习一下 SAP 标准教材 BC425 和 BC427。

   简单说一下我的理解:

  1. 第一代:基于源代码的增强。
    源代码增强以子程序形式发布,在 SAP 的发行版本中,使用 PERFORM 调用这些子程序,它们在发布时都是空的,集中在一些文件名倒数第二个字符为 Z 的包含程序中。用户增强时,应首先到 service marketplace 申请对象键,然后才能修改这些子程序,这些子程序可以使用程序中所有的全局数据。
    屏幕增强以客户屏幕形式发布,它们包含在标准程序中,没有什么特别规律。
    这种源代码增强和屏幕增强的说明可以从事务码 spro 后台配置中相关模块的路径里面找到。
    同时使用的针对数据表的增强是 append structure,可以在事务码 se11 中打开透明表,点击应用工具栏最右边的那个 append structure 按钮就能为数据表追加新的字段。
  2. 第二代:基于函数模块的增强。
    源代码增强以函数模块形式发布,在 SAP 的发行版本中,使用 CALL CUSTOMER-FUNCTION 调用这些函数模块,它们在发布时只有一句代码 INCLUDE xxxxxxx。用户增强时,无需申请对象键,直接双击这个包含,然后回车,就可以创建相关的包含文件,编写相应的代码了。这些函数模块中只能使用接口中传递的参数,不能使用调用程序的全局变量。
    屏幕增强也包含在函数模块所属的函数组中。
    针对数据表的增强是 CI_ 结构,这些结构以 .INCLUDE 结构的形式包含在 SAP 发布的数据表中,用户可以通过向这些结构中添加字段而对数据表进行增强。
    上述这类增强通过事务码 SMOD 进行维护,CMOD 进行实现。SMOD 中的一个增强可以包含上述的源代码、屏幕和表结构增强,按照较容易理解的逻辑结构来管理这些增强,使用相对更加便利。
  3. 第三代:基于面向对象概念的增强。
    这就是传说中的 BAdI(Business Add-Ins),源代码增强以接口形式发布,在 SAP 的发行版本中,也是通过接口的方法调用来使用。用户增强时,实际是实现一个(或多个)基于这个接口的实现类。由于接口可以有多个实现类,所以对一个增强可以有多种不同的源代码,它们通过过滤器应用于不同的业务场景。
    这种增强使用事务码 SE18 创建、SE19 实现。
    很遗憾,我对面向对象理解不深,使用 BAdI 也很少,所以不清楚它怎么实现屏幕增强。
  4. 第四代:Switch Framework。
    SAP 从 NetWeaver 7.0 以后退出的新增强体系,它对 BAdI 做出了改进,改叫新 BAdI 了。还新增 Enhancement Spot 和 Enhancement Section 以及隐式增强点的概念,基本可以在面向对象的程序里实现处处皆可增强的最高境界。
    但是由于我公司业务环境问题,我还完全没有用它做过任何实例,因此没有发言权。

 

          基于强晟的回复,补充几点:

  1. Field Exit技术:基于data element,如个屏幕的输入框参考该data element,定义激活Field Exit后,程序响应一个Function Code,可以触发该Field Exit逻辑。只支持传统的Dialog技术。详细可参考程序RSMODPRF。
  2. BTE(Business transaction Event):R/3 ERP的某几个transaction中以FUNCTION MODULE形式预留的出口,以事件event方式定义,可以被BOR(BAPI)所使用,被Workflow以事件方式触发。BAdI技术出现以前,这是唯一可以multiple实施,并且按照层次定义实施(可区分为SAP Applicatoin,Partner和Customer实施)。FIBF提供实施平台,可参考其中的文档。
  3. Enhancement framework 及 Switch Framework。准确地说,后者用来精确控制某类功能在一个系统中是否可以被启用。而前者,则提供系统功能增强定义与实施。
    从Netweaver 04s开始出现的Enhancement framework 可被认为Classic BAdI的升级,但其功能比Classic BAdI远远强大许多。
    Enhancement framework 相比Classic BAdI来说主要的新功能有:
    ->源代码增强,包括隐性增强(可以实施在某些特定地点,如FORM的开始或结束等等),系统级的支持,无需预定义;显性增强(强晟已经解释)。
    ->函数组增强,可用来增强Function Module接口参数
    ->类增强,可用来增加一个类的方法,增强方法的接口参数,以及对方法增强逻辑。
    ->语法级别的BAdI触发机制(Kernal-BAdI),BAdI不再由Exit handle来控制,而是升级称为ABAP语法级别的控制,以提供更高的执行效率。原来的BAdI因此改名Classic BAdI。
    ->框架提供了更多的管理功能,如通过Composite Enhancement Implementation合并管理若干增强实施。
    ->对系统升级后的BAdI实施提供更方便的管理。
    ->与被增强对象更紧密地结合,如Web Dynpro for ABAP编辑器中直接整合了BAdI实施。
    ->与Switch Framework的整合。
    ->兼容Classic BAdI,如可仍然使用SE18定义,SE19实施。

部分内容转自SAP中文论坛,忘记网址了,如作者有异议,请联系我

(rlds_env) server@server-Standard-PC-Q35-ICH9-2009:~/my_rlds/example_dataset$ tfds build INFO[build.py]: Loading dataset from path: /home/server/my_rlds/example_dataset/example_dataset_dataset_builder.py 2025-08-11 20:47:50.620420: I tensorflow/core/util/port.cc:110] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`. 2025-08-11 20:47:50.674693: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2025-08-11 20:47:51.381449: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT 2025-08-11 20:47:51.708800: I tensorflow/compiler/xla/stream_executor/cuda/cuda_gpu_executor.cc:995] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355 linux/Documentation/ABI/testing/sysfs-bus-pci at v6.0 · torvalds/linux linux/Documentation/ABI/testing/sysfs-bus-pci at v6.0 · torvalds/linux 2025-08-11 20:47:51.784318: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1960] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu Install TensorFlow with pip Install TensorFlow with pip for how to download and setup the required libraries for your platform. Skipping registering GPU devices... 2025-08-11 20:47:52.496086: W tensorflow/tsl/platform/cloud/google_auth_provider.cc:184] All attempts to get
最新发布
08-12
<think>我们正在处理用户关于使用TensorFlow Dataset (TFDS)构建命令时遇到的警告和错误。用户报告了三个主要问题: 1. GPU库未找到的警告 2. TensorRT未找到的错误 3. CPU指令优化相关的警告 根据用户的问题,我们需要分析可能的原因并提供解决方案。 ### 问题分析 1. **GPU库未找到警告**:这通常意味着TensorFlow无法找到所需的CUDA或cuDNN库。可能是由于环境变量设置不正确,或者没有安装对应的GPU版本TensorFlow。 2. **TensorRT未找到错误**:TensorRT是NVIDIA用于深度学习推理的优化库。如果用户没有安装TensorRT或者安装路径不在系统路径中,就会出现这个错误。 3. **CPU指令优化警告**:这通常是因为TensorFlow在编译时使用了某些CPU指令(如AVX2),但当前运行的CPU不支持这些指令。这可能会导致性能下降。 ### 解决方案 #### 1. 确保安装了GPU版本的TensorFlow 用户需要确认安装的是TensorFlow GPU版本。可以使用以下命令安装: ```bash pip install tensorflow-gpu ``` 或者,如果使用TensorFlow 2.x,则通常使用: ```bash pip install tensorflow ``` 但注意,从TensorFlow 2.1开始,`tensorflow`包已经包含了GPU支持,但需要系统有正确的CUDA和cuDNN环境。 #### 2. 安装并配置CUDA和cuDNN TensorFlow GPU版本需要特定版本的CUDA和cuDNN。请参考TensorFlow官网的[测试构建配置](https://www.tensorflow.org/install/source#gpu)来匹配版本。 例如,对于TensorFlow 2.10.0,需要CUDA 11.2和cuDNN 8.1。安装后,确保将CUDA路径添加到环境变量中。在Linux上,可以添加到`~/.bashrc`: ```bash export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-11.2/bin:$PATH ``` 然后执行`source ~/.bashrc`。 #### 3. 安装TensorRT(可选) 如果用户需要使用TensorRT,可以从[NVIDIA官网](https://developer.nvidia.com/tensorrt)下载并安装。安装后,同样需要将库路径添加到环境变量中。例如: ```bash export LD_LIBRARY_PATH=/path/to/TensorRT-8.x.x.x/lib:$LD_LIBRARY_PATH ``` #### 4. 处理CPU指令优化警告 这个警告通常不会影响功能,但可能会影响性能。如果用户希望消除警告,可以考虑以下两种方法: - **忽略警告**:通过设置环境变量`TF_CPP_MIN_LOG_LEVEL=2`来忽略警告(但这会隐藏所有INFO和WARNING级别的日志)。 - **从源码编译TensorFlow**:针对当前CPU的指令集进行编译,但这通常比较复杂。 #### 5. 构建TFDS数据集时的具体建议 在构建TFDS数据集时,如果遇到GPU相关的问题,可以尝试强制使用CPU来构建数据集,因为构建数据集通常不需要GPU。可以通过设置环境变量: ```bash export CUDA_VISIBLE_DEVICES="" ``` 这样,TensorFlow将不会使用GPU,从而避免GPU库缺失的问题。 ### 示例命令 假设用户要构建`mnist`数据集,可以这样运行: ```bash CUDA_VISIBLE_DEVICES="" tfds build mnist ``` ### 验证 在解决上述问题后,用户可以运行以下命令来验证TensorFlow是否能识别GPU: ```python import tensorflow as tf print(tf.config.list_physical_devices('GPU')) ``` 如果输出显示GPU设备,则表示GPU配置成功。 ### 总结 用户的问题主要是环境配置问题。需要确保安装了正确版本的CUDA和cuDNN,并正确设置环境变量。如果不需要在构建数据集时使用GPU,可以暂时禁用GPU。对于TensorRT,如果不需要可以忽略相关错误,或者安装并配置TensorRT。 §§相关问题§§ 1. 如何检查TensorFlow是否正在使用GPU? 2. 如何在不同版本的CUDA之间切换? 3. 如何从源码编译TensorFlow以支持特定的CPU指令集? 4. 在构建TFDS数据集时,如何利用多进程或分布式策略加速?</think>### TensorFlow Dataset 构建命令的 GPU 相关问题分析 当执行 `tfds build` 命令时出现 GPU 库未找到警告和 TensorRT 错误,通常由以下原因导致: #### 1. **GPU 环境配置问题** - **缺失 CUDA/cuDNN** TensorFlow GPU 版本需要匹配的 CUDA 和 cuDNN 库。若未安装或版本不兼容,会出现警告: ```bash Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file ``` - **验证 GPU 可用性** 运行以下 Python 代码检查 GPU 状态: ```python import tensorflow as tf print("GPU 设备:", tf.config.list_physical_devices('GPU')) print("CUDA 版本:", tf.sysconfig.get_build_info()["cuda_version"]) ``` #### 2. **TensorRT 缺失错误** - **错误示例** ```bash ERROR: Failed to initialize TensorRT library, function not found ``` TensorRT 是 NVIDIA 的推理加速库,**非必需组件**。此错误通常可忽略,除非明确需要 TensorRT 优化。 #### 3. **CPU 指令集警告** - **AVX/AVX2 警告** 当 CPU 不支持 TensorFlow 编译时的指令集时出现: ```bash This TensorFlow binary is optimized with AVX2, but your CPU does not support it ``` 此警告**不影响功能**,仅表示性能未最大化。 --- ### 解决方案 #### ✅ 步骤 1:修复 GPU 依赖 1. **安装匹配版本的 CUDA/cuDNN** - 查看 TensorFlow 版本对应的 CUDA 要求: ```bash pip show tensorflow | grep "Version" ``` | TF 版本 | CUDA 版本 | cuDNN 版本 | |----------|----------|-----------| | TF 2.10+ | 11.2 | 8.1 | | TF 2.6+ | 11.0-11.2| 8.0-8.1 | - 从 [NVIDIA 官网](https://developer.nvidia.com/cuda-toolkit-archive) 下载对应版本: ```bash wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run sudo sh cuda_11.2.0_460.27.04_linux.run ``` 2. **配置环境变量** 在 `~/.bashrc` 中添加: ```bash export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-11.2/bin:$PATH ``` 激活配置:`source ~/.bashrc` #### ✅ 步骤 2:处理 TensorRT 错误(可选) - **方案 A:忽略错误** 添加环境变量禁用 TensorRT 检查: ```bash export TF_CPP_MIN_LOG_LEVEL=2 # 屏蔽 INFO 日志 tfds build your_dataset ``` - **方案 B:安装 TensorRT** 从 [NVIDIA TensorRT 下载页](https://developer.nvidia.com/tensorrt) 获取对应版本,安装后添加库路径: ```bash export LD_LIBRARY_PATH=/path/to/TensorRT-8.x.x.x/lib:$LD_LIBRARY_PATH ``` #### ✅ 步骤 3:强制使用 CPU 构建数据集 如果 GPU 问题无法立即解决,可显式指定 CPU 构建: ```bash CUDA_VISIBLE_DEVICES="" tfds build your_dataset # 禁用 GPU ``` --- ### 验证成功构建 执行构建命令并检查输出: ```bash tfds build mnist --download_only # 示例:构建 MNIST 数据集 ``` 成功输出应包含: ``` Dataset mnist downloaded and prepared to /path/to/tensorflow_datasets/mnist/1.0.0. ``` --- ### 补充建议 1. **使用 Docker 容器** 避免环境冲突,使用官方 TensorFlow GPU 镜像: ```bash docker run --gpus all -it tensorflow/tensorflow:2.10.0-gpu ``` 2. **检查 GPU 驱动** 确保 NVIDIA 驱动版本 ≥ 450.80.02: ```bash nvidia-smi # 查看驱动版本 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值