2016-06-11 3 views
5

मैं tensorflow के लिए कुछ प्रयोगों के लिए बाहरी शीर्षलेख फ़ाइल (जैसे OpenCL हेडर फ़ाइल) जोड़ने की कोशिश कर रहा हूं। मैं tensorflow/कोर/BUILD फ़ाइल के तहत BUILD फाइल में इस जोड़ने की कोशिश की:bazel/tensorflow के दौरान बाहरी शीर्षलेख फ़ाइलों को जोड़ने के लिए

# This includes implementations of all kernels built into TensorFlow. 
cc_library(
    name = "all_kernels", 
    visibility = ["//visibility:public"], 
    copts = tf_copts() + ["-Ithird_party/include"], <==== this is the line I added 

मैं भी एक Softlink इस निर्देशिका में OpenCL ड्राइवर से इन हेडर फाइल के स्थान पर बनाया है (tensorflow/THIRD_PARTY से कम) भी (जैसे ln -s/opt/opencl /) लेकिन यह अभी भी शिकायत करता है कि उसे हेडर फ़ाइल नहीं मिली है।

यदि मैं बाहरी हेडर फ़ाइल सीधे (जैसे/opt/opencl/CL /) जोड़ता हूं तो यह शिकायत करता है कि बाहरी फ़ाइलों को शामिल नहीं किया जा सकता है (या ऐसी कोई चीज़)।

मेरे पास इन शीर्षलेख फ़ाइलों को/usr/include/में भी कॉपी करने के लिए रूट पासवर्ड नहीं है।

क्या कोई यह बता सकता है कि बाहरी शीर्षलेख फ़ाइलों को भवन के लिए tensorflow में कैसे करना है?

किसी भी त्वरित सहायता के लिए धन्यवाद।

उत्तर

0

बेज़ेल यह सुनिश्चित करने के लिए बहुत सख्त होने की कोशिश करता है कि इसके निर्माण में केवल उन फ़ाइलों को शामिल किया गया है जो यह सुनिश्चित करने के लिए कि वे पुन: उत्पन्न होते हैं। दुर्भाग्य से इसका प्रयोग करना मुश्किल हो सकता है। समस्या को हल करने का सही तरीका उन शीर्षकों के लिए एक निर्मित फ़ाइल और नियम बनाना है, जिन्हें आप शामिल करना चाहते हैं। आप बेज़ेल- * जेनरेट किए गए फ़ोल्डरों के साथ गड़बड़ करके कुछ भी हैक करने में सक्षम हो सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता हूं।

+1

धन्यवाद मदद के लिए, लेकिन मैं जानना चाहता था कि यह कैसे विशेष रूप से करता है। जैसा कि मैंने अपनी मूल पोस्ट में कहा था, जब मैं आंतरिक निर्देशिका में मुलायम लिंक जोड़ता हूं और इसे "-आई" के रूप में देता हूं, यह अभी भी काम नहीं करता है। तो, जानना चाहता था कि हम यह कैसे कर सकते हैं। –

1

आपको फ़ाइलों को इस नियम की निर्भरता के रूप में जोड़ना होगा।

IIUC, तो आपको निम्न संरचना है:

tensorflow/ 
    BUILD 
    WORKSPACE 
    tensorflow/ 
    core/ 
     BUILD 
    third_party/ 
    include -> /opt/opencl/CL # or something like that 

आप एक तरह से ज फ़ाइलों को बेनकाब करना चाहते हैं Bazel/पर निर्भर करते हैं समझ सकते हैं, इसलिए tensorflow/BUILD फ़ाइल को खोलने और निम्नलिखित जोड़ें:

cc_library(
    name = "opencl", 
    hdrs = glob(["third_party/include/*.h"]), 
    visibility = ["//visibility:public"], 
) 

यह तृतीय_party/include के अंतर्गत .h फ़ाइलों से एक C++ लाइब्रेरी बनाता है, जिसे स्रोत पेड़ में कहीं से भी निर्भर किया जा सकता है।

अब आप अपने tensorflow/core/BUILD फाइल करने के लिए जाने के लिए और वहाँ cc_library करने के लिए एक निर्भरता जोड़ें:

cc_library(
    name = "all_kernels", 
    visibility = ["//visibility:public"], 
    copts = tf_copts() + ["-Ithird_party/include"], 
    deps = [ 
     "//:opencl", 
     # plus any other deps 
    ], 
) 

स्थापना काप्ट सिर्फ झंडे बदल जाता है जब जीसीसी चलाया जाता है। निर्भरता के लिए //:opencl जोड़ना बीजेएल को उन फ़ाइलों को उपलब्ध कराने के लिए बताता है जब जीसीसी चलाया जाता है।

2

जब मैंने इंटेल एमकेएल के साथ टेंसरफ्लो बनाया और मुझे एमकेएल हेडर जोड़ना पड़ा तो मुझे इसी तरह की समस्या का सामना करना पड़ा।

  1. THIRD_PARTY फ़ोल्डर में अपने हेडर के लिए सिमलिंक बनाएँ, जैसे:

    ln -s /opt/OpenCL/include <your tensorflow folder>/third_party/opencl 
    
  2. <your tensorflow folder>/third_party/opencl फ़ोल्डर में सरल BUILD फ़ाइल बनाएँ:

    <your tensorflow folder>/third_party/opencl/include -> /opt/OpenCL/include 
    
    कमांड के साथ

    मेरे समाधान निम्नलिखित है:

    cc_library(
        name = "opencl", 
        hdrs = glob(["include/CL/*.h"]), 
        visibility = ["//visibility:public"], 
    ) 
    
  3. जोड़ें लक्ष्य पुस्तकालय में deps:

    cc_library(
        name = "all_kernels", 
        visibility = ["//visibility:public"], 
        copts = tf_copts() + ["-Ithird_party/opencl/include"], 
        deps = [ 
         "//third_party/opencl", 
         ... 
        ], 
    ) 
    
  4. लक्ष्य पुस्तकालय में संकलक विकल्प या तो जोड़ने के लिए मत भूलना के रूप में ऊपर या सिर्फ एक ध्वज के रूप में दिखाया गया है Bazel रहे हैं:

    bazel build --copt="-Ithird_party/opencl/include" ... 
    
संबंधित मुद्दे