Li Xinqi
Li Xinqi
提供了环境变量供切换: 1. ONEFLOW_LAZY_COMPILE_MODE=naive 旧版编译方式,全rank编译。 2. ONEFLOW_LAZY_COMPILE_MODE=rank_per_thread 多线程分离编译,每个rank放在独立的线程里。 3. ONEFLOW_LAZY_COMPILE_MODE=rank_per_iter 单线程分离编译,每个rank放在main线程的每次循环里。 如果多线程分离编译遇到bug,请回到单线程分离编译再跑一次。
# odb模块的api 本odb模块分两大类api: 一类是`gdb api: odb-*`,位于 [[oneflow/python](https://github.com/Oneflow-Inc/oneflow/pull/9488/files#diff-c5785fd4763e81dcfa06a7a4663f0f0c358308a5b54dc759318c1a75ceeec6bf) ](https://github.com/Oneflow-Inc/oneflow/pull/9488/files#diff-c5785fd4763e81dcfa06a7a4663f0f0c358308a5b54dc759318c1a75ceeec6bf) 另一类是`python api oneflow.odb.*`,位于 https://github.com/Oneflow-Inc/oneflow/pull/9488/files#diff-ca1e2c969de74bd750b287affaf80886386ec1a3d0038ecb3dfb1a23721fd4b3 `odb-*` api在gdb环境里使用,而`oneflow.odb.*` api在python环境里使用,最好是交互式python环境。 `odb-*` api目前包括: 1. `odb-b-normal`。给主线程的Profiler range设置断点。 2. `odb-b-scheduler`。给调度线程的profiler range设置断点。 3. `odb-b-worker`。给工作线程的profiler range设置断点。 4. `odb-b-all`。给所有线程的profiler range设置断点。 `oneflow.odb.*`...
# gdb odb-b-normal命令的使用方法 该gdb命令会在主线程的OF_PROFILER_RANGE_GUARD处设置断点,不影响vm内部的线程。 首先,请按https://github.com/Oneflow-Inc/oneflow/pull/9488#issue-1467376309 准备gdb python交互式oneflow环境。 接下来,按CTRL-C从python交互式环境退到gdb环境: ``` >>> --Type for more, q to quit, c to continue without paging-- Thread 1 "python3" received signal SIGINT, Interrupt. 0x00007ffff7d4dffb in...
# gdb odb-b-scheduler命令的使用方法 该gdb命令会在vm调度线程的OF_PROFILER_RANGE_GUARD处设置断点。 首先,请按https://github.com/Oneflow-Inc/oneflow/pull/9488#issue-1467376309 准备gdb python交互式oneflow环境。 接下来,按CTRL-C从python交互式环境退到gdb环境: ``` >>> --Type for more, q to quit, c to continue without paging-- Thread 1 "python3" received signal SIGINT, Interrupt. 0x00007ffff7d4dffb in...
## 准备带odb且具有独立worker线程的oneflow 需要编译oneflow的odb分支,编译时记得采用-DCMAKE_BUILD_TYPE=RelWithDebInfo,这种编译模式不会损失性能,在gdb里运行也有够用的debug信息。 ### 在gdb里运行python3 ```bash ONEFLOW_VM_COMPUTE_ON_WORKER_THREAD=1 ONEFLOW_VM_THREAD_MIN_ONLINE_MICROSECONDS=0 gdb -ex='source oneflow/tools/gdb/odb' -ex=r python3 ``` 注意,上述命令中的选项-ex='source oneflow/tools/gdb/odb'会寻找当前目录下的oneflow/tools/gdb/odb文件,所以请在oneflow repo所在目录的外层目录执行本条命令。 此时,我们进入了gdb模式下的Python交互界面 ``` Starting program: /home/lixinqi/miniconda3/envs/oneflow-dev-clang10-v2/bin/python3 [Thread debugging using libthread_db enabled] Using host libthread_db...
# gdb odb-b-worker命令的使用方法 该gdb命令会在vm工作线程的OF_PROFILER_RANGE_GUARD处设置断点。 首先,请按https://github.com/Oneflow-Inc/oneflow/pull/9488#issuecomment-1331730449 准备gdb python交互式oneflow环境。 接下来,按CTRL-C从python交互式环境退到gdb环境: ``` >>> --Type for more, q to quit, c to continue without paging-- Thread 1 "python3" received signal SIGINT, Interrupt. 0x00007ffff7d4dffb in...
# gdb odb-b-all命令的使用方法 这个命令会同时在所有线程profiler range处加入断点,一般不推荐使用,除非你想看多线程的实际执行效果。
# `oneflow.odb.stop_vm_scheduler()`和`oneflow.odb.restart_vm_scheduler()`的使用方法 这两个命令用于暂停和重启vm的调度线程。 首先,请按https://github.com/Oneflow-Inc/oneflow/pull/9488#issue-1467376309 准备gdb python交互式oneflow环境。 接下来,按CTRL-C从python交互式环境退到gdb环境: ``` >>> --Type for more, q to quit, c to continue without paging-- Thread 1 "python3" received signal SIGINT, Interrupt. 0x00007ffff7d4dffb in __GI___select...
# `oneflow.odb.stop_vm_worker()`和`oneflow.odb.restart_vm_worker()`的使用方法 用于暂停和挂起工作线程。 使用方法和https://github.com/Oneflow-Inc/oneflow/pull/9488#issuecomment-1331742693 类似,不过需要按https://github.com/Oneflow-Inc/oneflow/pull/9488#issuecomment-1331730449 准备gdb python oneflow交互环境。
这个pr 太危险了,不要这样。完全可每个commit拆成一个pr。