Как перечислить .so файлы, которые загружаются при запуске скрипта Python? - PullRequest
1 голос
/ 27 сентября 2019

Как вывести список всех .so файлов (полный путь), которые загружаются при запуске скрипта python?

Можно ли получить полный путь (например) libcudart.so.10.1?Можно ли получить список загруженных .so (полный путь)?

Например, я бегу:

python -c "import tensorflow as tf; tf.test.is_gpu_available()"

Вывод:

2019-09-27 15:02:27.186029: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1
2019-09-27 15:02:27.657901: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties:
name: TITAN RTX major: 7 minor: 5 memoryClockRate(GHz): 1.77
pciBusID: 0000:17:00.0
2019-09-27 15:02:27.658580: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 1 with properties:
name: TITAN RTX major: 7 minor: 5 memoryClockRate(GHz): 1.77
pciBusID: 0000:65:00.0
2019-09-27 15:02:27.658766: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
2019-09-27 15:02:27.659868: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10
2019-09-27 15:02:27.661073: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10
2019-09-27 15:02:27.661305: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10
2019-09-27 15:02:27.662477: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10
2019-09-27 15:02:27.663054: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10
2019-09-27 15:02:27.665455: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-09-27 15:02:27.667986: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0, 1
2019-09-27 15:02:27.668031: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
2019-09-27 15:02:27.669523: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-09-27 15:02:27.669535: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187]      0 1
2019-09-27 15:02:27.669542: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0:   N N
2019-09-27 15:02:27.669546: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 1:   N N
2019-09-27 15:02:27.674204: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/device:GPU:0 with 22845 MB memory) -> physical GPU (device: 0, name: TITAN RTX, pci bus id: 0000:17:00.0, compute capability: 7.5)
2019-09-27 15:02:27.675838: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/device:GPU:1 with 22823 MB memory) -> physical GPU (device: 1, name: TITAN RTX, pci bus id: 0000:65:00.0, compute capability: 7.5)

1 Ответ

1 голос
/ 29 сентября 2019

При работе в Linux, в зависимости от вашей среды, вы можете получить информацию, используя одну из этих альтернатив:

  1. ld.so отладочные флаги
  2. strace

С помощью флагов отладки ld.so вы можете активировать режим отладки, установив для переменной среды LD_DEBUG значение «libs» (или даже «все»), прежде чем запускать код python (в зависимости от вашей оболочки: export LD_DEBUG = libs,или setenv LD_DEBUG libs).Путь поиска динамически загружаемых библиотек будет отображаться в stderr.

Посмотрите на man-странице ld.so дополнительные опции.

Пример вывода - из LD_DEBUG = libs (используя python 'import json')

owner@vm1:~/Project/stackoverflow/58152351$ python
     28796: find library=libc.so.6 [0]; searching
     28796:  search cache=/etc/ld.so.cache
     28796:   trying file=/lib/x86_64-linux-gnu/libc.so.6
     28796: 
     28796: find library=libpthread.so.0 [0]; searching
     28796:  search cache=/etc/ld.so.cache
     28796:   trying file=/lib/x86_64-linux-gnu/libpthread.so.0
     28796: 
     28796: find library=libdl.so.2 [0]; searching
     28796:  search cache=/etc/ld.so.cache
     28796:   trying file=/lib/x86_64-linux-gnu/libdl.so.2
...
>>> import json
     28796: 
     28796: calling init: /usr/lib/python2.7/lib-dynload/_json.x86_64-linux-gnu.so
     28796: 

В качестве альтернативы можно использовать strace, но для анализа его вывода требуется значительно больше усилий.Строки 'stat' могут предоставлять информацию о пути поиска для каждой библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...