मैं PySpark को एक प्रशिक्षित Faiss सूचकांक तैनात करने और एक वितरित खोज करने की कोशिश कर रहा था। तो पूरी प्रक्रिया में शामिल हैं:
- पूर्व प्रक्रिया
- लोड सूचकांक (~ 15G) लोड करें और Faiss खोज करें
- पोस्ट-प्रोसेस और एचडीएफएस को लिखें
मैं 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)