mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 00:21:07 +01:00
Summary: Resubmit #20698 which got messed up. Idea is that when PyTorch is used in a custom build environment (e.g. Facebook), it's useful to track usage of various APIs centrally. This PR introduces a simple very lightweight mechanism to do so - only first invocation of a trigger point would be logged. This is significantly more lightweight than #18235 and thus we can allow to put logging in e.g. TensorImpl. Also adds an initial list of trigger points. Trigger points are added in such a way that no static initialization triggers them, i.e. just linking with libtorch.so will not cause any logging. Further suggestions of what to log are welcomed. Pull Request resolved: https://github.com/pytorch/pytorch/pull/20745 Differential Revision: D15429196 Pulled By: dzhulgakov fbshipit-source-id: a5e41a709a65b7ebccc6b95f93854e583cf20aca
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import os
|
|
import sys
|
|
import subprocess
|
|
import torch
|
|
from common_utils import TestCase, run_tests
|
|
|
|
|
|
class LoggingTest(TestCase):
|
|
@staticmethod
|
|
def _runAndCaptureStderr(code):
|
|
env = os.environ.copy()
|
|
env["PYTORCH_API_USAGE_STDERR"] = "1"
|
|
pipes = subprocess.Popen(
|
|
[sys.executable, '-c', code],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
env=env)
|
|
return pipes.communicate()[1].decode('ascii')
|
|
|
|
def testApiUsage(self):
|
|
"""
|
|
This test verifies that api usage logging is not triggered via static
|
|
initialization. Since it's triggered at first invocation only - we just
|
|
subprocess
|
|
"""
|
|
s = self._runAndCaptureStderr("import torch")
|
|
self.assertRegexpMatches(s, "PYTORCH_API_USAGE.*import")
|
|
# import the shared library directly - it triggers static init but doesn't call anything
|
|
s = self._runAndCaptureStderr("from ctypes import CDLL; CDLL('{}')".format(torch._C.__file__))
|
|
self.assertNotRegexpMatches(s, "PYTORCH_API_USAGE")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
run_tests()
|