PySpark के लिए रनटाइम पर कॉन्फ़िगरेशन बदलना

वोट
2

मैं PySpark को एक प्रशिक्षित Faiss सूचकांक तैनात करने और एक वितरित खोज करने की कोशिश कर रहा था। तो पूरी प्रक्रिया में शामिल हैं:

  1. पूर्व प्रक्रिया
  2. लोड सूचकांक (~ 15G) लोड करें और Faiss खोज करें
  3. पोस्ट-प्रोसेस और एचडीएफएस को लिखें

मैं 10 के रूप में कार्य के अनुसार सीपीयू सेट करता हूं ( spark.task.cpus=10 ) बहु-सूत्र खोज करने के लिए। लेकिन चरण 1 और चरण 3 केवल 1 सीपीयू प्रति कार्य का उपयोग कर सकते हैं। सभी सीपीयू का उपयोग करने के लिए मैं सेट करना चाहता हूं spark.task.cpus=1 चरण 1 और 3 से पहले। मैंने सेट विधि की कोशिश की है RuntimeConfig लेकिन ऐसा लगता है कि इसने मेरा कार्यक्रम अटक गया। रनटाइम पर कॉन्फ़िगरेशन कैसे बदलें या इस समस्या को कैसे अनुकूलित करें, इस बारे में कोई सलाह?

कोड उदाहरण:

def load_and_search(x, model_path):
    faiss_idx = faiss.read_index(model_path)
    q_vec = np.concatenate(x)
    _, idx_array = faiss_idx.search(q_vec, k=10)
    return idx_array


data = sc.textFile(input_path)

# preprocess, only used one cpu per task
data = data.map(lambda x: x)

# load faiss index and search, used multiple cpus per task
data = data.mapPartitioins(lambda x: load_and_search(x, model_path))

# postprocess and write, one cpu per task
data = data.map(lambda x: x).saveAsTextFile(result_path)
26/04/2020 को 10:00
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

वैकल्पिक विचार: उपयोग mapPartitions चरण 1 और 3 के लिए। फिर विभाजन में वस्तुओं को मैप करने के लिए प्रत्येक कार्यकर्ता के भीतर एक मल्टीप्रोसेसिंग पूल का उपयोग करें। इस तरह, आप एक कार्यकर्ता को सौंपे गए सभी cpus को कॉन्फ़िगरेशन में बदलाव के बिना उपयोग कर सकते हैं (जो मुझे नहीं पता है कि क्या यह संभव है)।

स्यूडोकोड:

def item_mapper(item):
    return ...

def partition_mapper(partition):
    pool = mp.Pool(processes=10)
    yield from pool.imap(partition, item_mapper)

rdd.mapPartitions(partition_mapper)
13/05/2020 को 10:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more