logging.h 4.63 KB
Newer Older
Tim Moon's avatar
Tim Moon committed
1
/*************************************************************************
2
 * Copyright (c) 2022-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
Tim Moon's avatar
Tim Moon committed
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 *
 * See LICENSE for license information.
 ************************************************************************/

#ifndef TRANSFORMER_ENGINE_COMMON_UTIL_LOGGING_H_
#define TRANSFORMER_ENGINE_COMMON_UTIL_LOGGING_H_

#include <stdexcept>

#include <cublas_v2.h>
#include <cuda_runtime_api.h>
#include <cudnn.h>
#include <nvrtc.h>

#include "../util/string.h"

#define NVTE_ERROR(...)                                         \
  do {                                                          \
    throw ::std::runtime_error(                                 \
      ::transformer_engine::concat_strings(                     \
        __FILE__ ":", __LINE__,                                 \
        " in function ", __func__, ": ",                        \
        ::transformer_engine::concat_strings(__VA_ARGS__)));    \
  } while (false)

#define NVTE_CHECK(expr, ...)                                           \
  do {                                                                  \
    if (!(expr)) {                                                      \
      NVTE_ERROR("Assertion failed: " #expr ". ",                       \
                 ::transformer_engine::concat_strings(__VA_ARGS__));    \
    }                                                                   \
  } while (false)

#define NVTE_CHECK_CUDA(expr)                                           \
  do {                                                                  \
    const cudaError_t status_NVTE_CHECK_CUDA = (expr);                  \
    if (status_NVTE_CHECK_CUDA != cudaSuccess) {                        \
      NVTE_ERROR("CUDA Error: ",                                        \
                 cudaGetErrorString(status_NVTE_CHECK_CUDA));           \
    }                                                                   \
  } while (false)

#define NVTE_CHECK_CUBLAS(expr)                                         \
  do {                                                                  \
    const cublasStatus_t status_NVTE_CHECK_CUBLAS = (expr);             \
    if (status_NVTE_CHECK_CUBLAS != CUBLAS_STATUS_SUCCESS) {            \
      NVTE_ERROR("cuBLAS Error: ",                                      \
                 cublasGetStatusString(status_NVTE_CHECK_CUBLAS));      \
    }                                                                   \
  } while (false)

#define NVTE_CHECK_CUDNN(expr)                                          \
  do {                                                                  \
    const cudnnStatus_t status_NVTE_CHECK_CUDNN = (expr);               \
    if (status_NVTE_CHECK_CUDNN != CUDNN_STATUS_SUCCESS) {              \
      NVTE_ERROR("cuDNN Error: ",                                       \
                 cudnnGetErrorString(status_NVTE_CHECK_CUDNN),          \
                 ". "                                                   \
                 "For more information, enable cuDNN error logging "    \
                 "by setting CUDNN_LOGERR_DBG=1 and "                   \
                 "CUDNN_LOGDEST_DBG=stderr in the environment.");       \
    }                                                                   \
  } while (false)

67
68
69
70
71
72
73
74
75
76
77
78
79
#define NVTE_CHECK_CUDNN_FE(expr)                                       \
  do {                                                                  \
    const auto error = (expr);                                          \
    if (error.is_bad()) {                                               \
      NVTE_ERROR("cuDNN Error: ",                                       \
                 error.err_msg,                                         \
                 ". "                                                   \
                 "For more information, enable cuDNN error logging "    \
                 "by setting CUDNN_LOGERR_DBG=1 and "                   \
                 "CUDNN_LOGDEST_DBG=stderr in the environment.");       \
    }                                                                   \
  } while (false)

Tim Moon's avatar
Tim Moon committed
80
81
82
83
84
85
86
87
88
89
#define NVTE_CHECK_NVRTC(expr)                                  \
  do {                                                          \
    const nvrtcResult status_NVTE_CHECK_NVRTC = (expr);         \
    if (status_NVTE_CHECK_NVRTC != NVRTC_SUCCESS) {             \
      NVTE_ERROR("NVRTC Error: ",                               \
                 nvrtcGetErrorString(status_NVTE_CHECK_NVRTC)); \
    }                                                           \
  } while (false)

#endif  // TRANSFORMER_ENGINE_COMMON_UTIL_LOGGING_H_