@@ -182,206 +182,206 @@ RUN df -h && \
182182
183183# Stage 1: Clone PyTorch repository at specific version with retry logic
184184# Clone the specific tag directly with --branch to avoid checkout issues
185- # RUN git clone --depth=1 --shallow-submodules --branch ${PYTORCH_VERSION} \
186- # https://github.com/pytorch/pytorch.git /tmp/pytorch || \
187- # (echo "First clone attempt failed, retrying..." && sleep 10 && \
188- # git clone --depth=1 --shallow-submodules --branch ${PYTORCH_VERSION} \
189- # https://github.com/pytorch/pytorch.git /tmp/pytorch)
185+ RUN git clone --depth=1 --shallow-submodules --branch ${PYTORCH_VERSION} \
186+ https://github.com/pytorch/pytorch.git /tmp/pytorch || \
187+ (echo "First clone attempt failed, retrying..." && sleep 10 && \
188+ git clone --depth=1 --shallow-submodules --branch ${PYTORCH_VERSION} \
189+ https://github.com/pytorch/pytorch.git /tmp/pytorch)
190190
191191# # Stage 2: Update submodules (checkout is already done by the clone)
192- # RUN cd /tmp/pytorch && \
193- # git submodule sync && \
194- # git submodule update --init --depth=1 --recursive
192+ RUN cd /tmp/pytorch && \
193+ git submodule sync && \
194+ git submodule update --init --depth=1 --recursive
195195
196196# Stage 3: Configure PyTorch build with libc++ detection
197197# This is complex because PyTorch and Swift need to use the same C++ standard library
198- # RUN . /etc/profile.d/pytorch.sh && \
199- # echo "Using OpenMP include: $OMP_INCLUDE_DIR" && \
200- # echo "Using OpenMP library: $OMP_LIBRARY" && \
201- # cd /tmp/pytorch && \
202- # mkdir -p build && \
203- # cd build && \
204- # \
205- # # Step 2: Locate compiler and toolchain directories
206- # # We need to know where clang and Swift are installed to configure the build
207- # CLANG_RESOURCE_DIR="$(clang++ -print-resource-dir)" && \
208- # LLVM_BASE_DIR="$(realpath "${CLANG_RESOURCE_DIR}/../../..")" && \
209- # echo "Clang resource dir: ${CLANG_RESOURCE_DIR}" && \
210- # echo "LLVM base dir: ${LLVM_BASE_DIR}" && \
211- # SWIFT_BIN="$(which swift)" && \
212- # SWIFT_TOOLCHAIN_DIR="$(dirname $(dirname ${SWIFT_BIN}))" && \
213- # echo "Swift toolchain dir: ${SWIFT_TOOLCHAIN_DIR}" && \
214- # \
215- # # Step 3: Find libc++ (C++ standard library)
216- # # TaylorTorch uses Swift C++ interop, so PyTorch must use the same C++ stdlib as Swift
217- # # Try Swift's bundled libc++ first, then fall back to system LLVM 17
218- # LIBCXX_INCLUDE_DIR="" && \
219- # LIBCXX_SOURCE="unknown" && \
220- # for candidate in \
221- # "${SWIFT_TOOLCHAIN_DIR}/lib/swift/clang/include/c++/v1" \
222- # "${SWIFT_TOOLCHAIN_DIR}/include/c++/v1" \
223- # "${SWIFT_TOOLCHAIN_DIR}/lib/swift_static/clang/include/c++/v1" \
224- # "${CLANG_RESOURCE_DIR}/../../../include/c++/v1"; do \
225- # if [ -d "${candidate}" ] && [ -f "${candidate}/cstddef" ]; then \
226- # LIBCXX_INCLUDE_DIR="$(realpath "${candidate}")" && \
227- # LIBCXX_SOURCE="Swift toolchain" && \
228- # echo "✓ Found libc++ in Swift toolchain at ${LIBCXX_INCLUDE_DIR}" && \
229- # break; \
230- # fi; \
231- # done && \
232- # if [ -z "${LIBCXX_INCLUDE_DIR}" ]; then \
233- # echo "ℹ Swift toolchain doesn't include libc++, using system LLVM 17" && \
234- # for candidate in \
235- # "/usr/lib/llvm-17/include/c++/v1" \
236- # "/usr/include/c++/v1"; do \
237- # if [ -d "${candidate}" ] && [ -f "${candidate}/cstddef" ]; then \
238- # LIBCXX_INCLUDE_DIR="$(realpath "${candidate}")" && \
239- # LIBCXX_SOURCE="system LLVM 17" && \
240- # echo "✓ Found libc++ in system at ${LIBCXX_INCLUDE_DIR}" && \
241- # break; \
242- # fi; \
243- # done; \
244- # fi && \
245- # if [ -z "${LIBCXX_INCLUDE_DIR}" ]; then \
246- # echo "ERROR: Unable to locate libc++ headers." && \
247- # echo "Please ensure libc++-17-dev is installed." && \
248- # exit 1; \
249- # fi && \
250- # LIBCXX_LIBRARY_DIR="" && \
251- # if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
252- # for candidate in \
253- # "${SWIFT_TOOLCHAIN_DIR}/lib/swift/linux" \
254- # "${SWIFT_TOOLCHAIN_DIR}/lib"; do \
255- # if ls "${candidate}/libc++.so"* >/dev/null 2>&1; then \
256- # LIBCXX_LIBRARY_DIR="$(realpath "${candidate}")" && \
257- # echo "✓ Found libc++ library in Swift toolchain at ${LIBCXX_LIBRARY_DIR}" && \
258- # break; \
259- # fi; \
260- # done; \
261- # fi && \
262- # if [ -z "${LIBCXX_LIBRARY_DIR}" ]; then \
263- # for candidate in \
264- # "/usr/lib/llvm-17/lib" \
265- # "/usr/lib/x86_64-linux-gnu" \
266- # "/usr/lib"; do \
267- # if ls "${candidate}/libc++.so"* >/dev/null 2>&1; then \
268- # LIBCXX_LIBRARY_DIR="$(realpath "${candidate}")" && \
269- # echo "✓ Found libc++ library at ${LIBCXX_LIBRARY_DIR}" && \
270- # break; \
271- # fi; \
272- # done; \
273- # fi && \
274- # if [ -z "${LIBCXX_LIBRARY_DIR}" ]; then \
275- # echo "ERROR: Unable to locate libc++ libraries." && \
276- # echo "Please ensure libc++-17-dev is installed." && \
277- # exit 1; \
278- # fi && \
279- # echo "libc++ include dir: ${LIBCXX_INCLUDE_DIR}" && \
280- # echo "libc++ library dir: ${LIBCXX_LIBRARY_DIR}" && \
281- # export USE_LIBCXX=1 && \
282- # if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
283- # export CPLUS_INCLUDE_PATH="${SWIFT_TOOLCHAIN_DIR}/lib/swift:${SWIFT_TOOLCHAIN_DIR}/lib/swift/clang/include"; \
284- # fi && \
285- # export CXXFLAGS="-stdlib=libc++" && \
286- # export LDFLAGS="-L${LIBCXX_LIBRARY_DIR}" && \
287- # if [ -n "$LIBRARY_PATH" ]; then \
288- # export LIBRARY_PATH="${LIBCXX_LIBRARY_DIR}:${LIBRARY_PATH}"; \
289- # else \
290- # export LIBRARY_PATH="${LIBCXX_LIBRARY_DIR}"; \
291- # fi && \
292- # OPENMP_C_FLAGS="-fopenmp=libomp" && \
293- # OPENMP_CXX_FLAGS="-fopenmp=libomp" && \
294- # RESOURCE_INCLUDE="$(realpath "${CLANG_RESOURCE_DIR}/include")" && \
295- # if [ -n "$OMP_INCLUDE_DIR" ] && [ "$OMP_INCLUDE_DIR" != "$RESOURCE_INCLUDE" ]; then \
296- # OPENMP_C_FLAGS="$OPENMP_C_FLAGS -I${OMP_INCLUDE_DIR}" && \
297- # OPENMP_CXX_FLAGS="$OPENMP_CXX_FLAGS -I${OMP_INCLUDE_DIR}"; \
298- # fi && \
299- # if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
300- # BUILD_CC="${SWIFT_TOOLCHAIN_DIR}/bin/clang" && \
301- # BUILD_CXX="${SWIFT_TOOLCHAIN_DIR}/bin/clang++" && \
302- # BUILD_RESOURCE_INCLUDE="${RESOURCE_INCLUDE}" && \
303- # echo "✓ Using Swift's clang for PyTorch build"; \
304- # else \
305- # if [ -f "/usr/lib/llvm-17/bin/clang" ] && [ -f "/usr/lib/llvm-17/bin/clang++" ]; then \
306- # BUILD_CC="/usr/lib/llvm-17/bin/clang" && \
307- # BUILD_CXX="/usr/lib/llvm-17/bin/clang++" && \
308- # BUILD_RESOURCE_INCLUDE="/usr/lib/llvm-17/lib/clang/17/include" && \
309- # echo "✓ Using system clang-17 for PyTorch build (matches libc++ 17)"; \
310- # else \
311- # echo "⚠ System clang-17 not found, falling back to Swift's clang" && \
312- # BUILD_CC="${SWIFT_TOOLCHAIN_DIR}/bin/clang" && \
313- # BUILD_CXX="${SWIFT_TOOLCHAIN_DIR}/bin/clang++" && \
314- # BUILD_RESOURCE_INCLUDE="${RESOURCE_INCLUDE}"; \
315- # fi; \
316- # fi && \
317- # CMAKE_CXX_FLAGS="-stdlib=libc++" && \
318- # if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
319- # CMAKE_PREFIX_PATH="${LLVM_BASE_DIR};/usr"; \
320- # else \
321- # CMAKE_PREFIX_PATH="/usr/lib/llvm-17;/usr"; \
322- # fi && \
323- # echo "=== Build Configuration ===" && \
324- # echo "Compiler: ${BUILD_CC}" && \
325- # echo "C++ Compiler: ${BUILD_CXX}" && \
326- # echo "libc++ Source: ${LIBCXX_SOURCE}" && \
327- # echo "libc++ Include: ${LIBCXX_INCLUDE_DIR}" && \
328- # echo "libc++ Library: ${LIBCXX_LIBRARY_DIR}" && \
329- # echo "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" && \
330- # echo "===========================" && \
331- # CC="${BUILD_CC}" CXX="${BUILD_CXX}" cmake .. \
332- # -DCMAKE_C_COMPILER="${BUILD_CC}" \
333- # -DCMAKE_CXX_COMPILER="${BUILD_CXX}" \
334- # -DCMAKE_CXX_STANDARD=17 \
335- # -DCMAKE_CXX_EXTENSIONS=OFF \
336- # -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}" \
337- # -DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++ -L${LIBCXX_LIBRARY_DIR} -Wl,-rpath,${LIBCXX_LIBRARY_DIR}" \
338- # -DCMAKE_SHARED_LINKER_FLAGS="-stdlib=libc++ -L${LIBCXX_LIBRARY_DIR} -Wl,-rpath,${LIBCXX_LIBRARY_DIR}" \
339- # -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
340- # -DUSE_LIBCXX=ON \
341- # -DOpenMP_C_FLAGS="${OPENMP_C_FLAGS}" \
342- # -DOpenMP_CXX_FLAGS="${OPENMP_CXX_FLAGS}" \
343- # -DOpenMP_C_LIB_NAMES="libomp" \
344- # -DOpenMP_CXX_LIB_NAMES="libomp" \
345- # -DOpenMP_libomp_LIBRARY="${OMP_LIBRARY}" \
346- # -DBUILD_SHARED_LIBS=ON \
347- # -DCMAKE_BUILD_TYPE=Release \
348- # -DCMAKE_INSTALL_PREFIX=/opt/pytorch \
349- # -DBUILD_PYTHON=OFF \
350- # -DBUILD_TEST=OFF \
351- # -DBUILD_CAFFE2=OFF \
352- # -DUSE_DISTRIBUTED=OFF \
353- # -DUSE_MPS=OFF \
354- # -DUSE_CUDA=OFF \
355- # -DUSE_MKLDNN=OFF \
356- # -DUSE_XNNPACK=OFF \
357- # -DUSE_QNNPACK=OFF \
358- # -DUSE_FBGEMM=OFF \
359- # -DPYTHON_EXECUTABLE=$(which python3) \
360- # -D_GLIBCXX_USE_CXX11_ABI=1 \
361- # -GNinja
198+ RUN . /etc/profile.d/pytorch.sh && \
199+ echo "Using OpenMP include: $OMP_INCLUDE_DIR" && \
200+ echo "Using OpenMP library: $OMP_LIBRARY" && \
201+ cd /tmp/pytorch && \
202+ mkdir -p build && \
203+ cd build && \
204+ \
205+ # Step 2: Locate compiler and toolchain directories
206+ # We need to know where clang and Swift are installed to configure the build
207+ CLANG_RESOURCE_DIR="$(clang++ -print-resource-dir)" && \
208+ LLVM_BASE_DIR="$(realpath " ${CLANG_RESOURCE_DIR}/../../..")" && \
209+ echo "Clang resource dir: ${CLANG_RESOURCE_DIR}" && \
210+ echo "LLVM base dir: ${LLVM_BASE_DIR}" && \
211+ SWIFT_BIN="$(which swift)" && \
212+ SWIFT_TOOLCHAIN_DIR="$(dirname $(dirname ${SWIFT_BIN}))" && \
213+ echo "Swift toolchain dir: ${SWIFT_TOOLCHAIN_DIR}" && \
214+ \
215+ # Step 3: Find libc++ (C++ standard library)
216+ # TaylorTorch uses Swift C++ interop, so PyTorch must use the same C++ stdlib as Swift
217+ # Try Swift's bundled libc++ first, then fall back to system LLVM 17
218+ LIBCXX_INCLUDE_DIR="" && \
219+ LIBCXX_SOURCE="unknown" && \
220+ for candidate in \
221+ "${SWIFT_TOOLCHAIN_DIR}/lib/swift/clang/include/c++/v1" \
222+ "${SWIFT_TOOLCHAIN_DIR}/include/c++/v1" \
223+ "${SWIFT_TOOLCHAIN_DIR}/lib/swift_static/clang/include/c++/v1" \
224+ "${CLANG_RESOURCE_DIR}/../../../include/c++/v1" ; do \
225+ if [ -d "${candidate}" ] && [ -f "${candidate}/cstddef" ]; then \
226+ LIBCXX_INCLUDE_DIR="$(realpath " ${candidate}")" && \
227+ LIBCXX_SOURCE="Swift toolchain" && \
228+ echo "✓ Found libc++ in Swift toolchain at ${LIBCXX_INCLUDE_DIR}" && \
229+ break; \
230+ fi; \
231+ done && \
232+ if [ -z "${LIBCXX_INCLUDE_DIR}" ]; then \
233+ echo "ℹ Swift toolchain doesn't include libc++, using system LLVM 17" && \
234+ for candidate in \
235+ "/usr/lib/llvm-17/include/c++/v1" \
236+ "/usr/include/c++/v1" ; do \
237+ if [ -d "${candidate}" ] && [ -f "${candidate}/cstddef" ]; then \
238+ LIBCXX_INCLUDE_DIR="$(realpath " ${candidate}")" && \
239+ LIBCXX_SOURCE="system LLVM 17" && \
240+ echo "✓ Found libc++ in system at ${LIBCXX_INCLUDE_DIR}" && \
241+ break; \
242+ fi; \
243+ done; \
244+ fi && \
245+ if [ -z "${LIBCXX_INCLUDE_DIR}" ]; then \
246+ echo "ERROR: Unable to locate libc++ headers." && \
247+ echo "Please ensure libc++-17-dev is installed." && \
248+ exit 1; \
249+ fi && \
250+ LIBCXX_LIBRARY_DIR="" && \
251+ if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
252+ for candidate in \
253+ "${SWIFT_TOOLCHAIN_DIR}/lib/swift/linux" \
254+ "${SWIFT_TOOLCHAIN_DIR}/lib" ; do \
255+ if ls "${candidate}/libc++.so" * >/dev/null 2>&1; then \
256+ LIBCXX_LIBRARY_DIR="$(realpath " ${candidate}")" && \
257+ echo "✓ Found libc++ library in Swift toolchain at ${LIBCXX_LIBRARY_DIR}" && \
258+ break; \
259+ fi; \
260+ done; \
261+ fi && \
262+ if [ -z "${LIBCXX_LIBRARY_DIR}" ]; then \
263+ for candidate in \
264+ "/usr/lib/llvm-17/lib" \
265+ "/usr/lib/x86_64-linux-gnu" \
266+ "/usr/lib" ; do \
267+ if ls "${candidate}/libc++.so" * >/dev/null 2>&1; then \
268+ LIBCXX_LIBRARY_DIR="$(realpath " ${candidate}")" && \
269+ echo "✓ Found libc++ library at ${LIBCXX_LIBRARY_DIR}" && \
270+ break; \
271+ fi; \
272+ done; \
273+ fi && \
274+ if [ -z "${LIBCXX_LIBRARY_DIR}" ]; then \
275+ echo "ERROR: Unable to locate libc++ libraries." && \
276+ echo "Please ensure libc++-17-dev is installed." && \
277+ exit 1; \
278+ fi && \
279+ echo "libc++ include dir: ${LIBCXX_INCLUDE_DIR}" && \
280+ echo "libc++ library dir: ${LIBCXX_LIBRARY_DIR}" && \
281+ export USE_LIBCXX=1 && \
282+ if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
283+ export CPLUS_INCLUDE_PATH="${SWIFT_TOOLCHAIN_DIR}/lib/swift:${SWIFT_TOOLCHAIN_DIR}/lib/swift/clang/include" ; \
284+ fi && \
285+ export CXXFLAGS="-stdlib=libc++" && \
286+ export LDFLAGS="-L${LIBCXX_LIBRARY_DIR}" && \
287+ if [ -n "$LIBRARY_PATH" ]; then \
288+ export LIBRARY_PATH="${LIBCXX_LIBRARY_DIR}:${LIBRARY_PATH}" ; \
289+ else \
290+ export LIBRARY_PATH="${LIBCXX_LIBRARY_DIR}" ; \
291+ fi && \
292+ OPENMP_C_FLAGS="-fopenmp=libomp" && \
293+ OPENMP_CXX_FLAGS="-fopenmp=libomp" && \
294+ RESOURCE_INCLUDE="$(realpath " ${CLANG_RESOURCE_DIR}/include")" && \
295+ if [ -n "$OMP_INCLUDE_DIR" ] && [ "$OMP_INCLUDE_DIR" != "$RESOURCE_INCLUDE" ]; then \
296+ OPENMP_C_FLAGS="$OPENMP_C_FLAGS -I${OMP_INCLUDE_DIR}" && \
297+ OPENMP_CXX_FLAGS="$OPENMP_CXX_FLAGS -I${OMP_INCLUDE_DIR}" ; \
298+ fi && \
299+ if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
300+ BUILD_CC="${SWIFT_TOOLCHAIN_DIR}/bin/clang" && \
301+ BUILD_CXX="${SWIFT_TOOLCHAIN_DIR}/bin/clang++" && \
302+ BUILD_RESOURCE_INCLUDE="${RESOURCE_INCLUDE}" && \
303+ echo "✓ Using Swift's clang for PyTorch build" ; \
304+ else \
305+ if [ -f "/usr/lib/llvm-17/bin/clang" ] && [ -f "/usr/lib/llvm-17/bin/clang++" ]; then \
306+ BUILD_CC="/usr/lib/llvm-17/bin/clang" && \
307+ BUILD_CXX="/usr/lib/llvm-17/bin/clang++" && \
308+ BUILD_RESOURCE_INCLUDE="/usr/lib/llvm-17/lib/clang/17/include" && \
309+ echo "✓ Using system clang-17 for PyTorch build (matches libc++ 17)" ; \
310+ else \
311+ echo "⚠ System clang-17 not found, falling back to Swift's clang" && \
312+ BUILD_CC="${SWIFT_TOOLCHAIN_DIR}/bin/clang" && \
313+ BUILD_CXX="${SWIFT_TOOLCHAIN_DIR}/bin/clang++" && \
314+ BUILD_RESOURCE_INCLUDE="${RESOURCE_INCLUDE}" ; \
315+ fi; \
316+ fi && \
317+ CMAKE_CXX_FLAGS="-stdlib=libc++" && \
318+ if [ "$LIBCXX_SOURCE" = "Swift toolchain" ]; then \
319+ CMAKE_PREFIX_PATH="${LLVM_BASE_DIR};/usr" ; \
320+ else \
321+ CMAKE_PREFIX_PATH="/usr/lib/llvm-17;/usr" ; \
322+ fi && \
323+ echo "=== Build Configuration ===" && \
324+ echo "Compiler: ${BUILD_CC}" && \
325+ echo "C++ Compiler: ${BUILD_CXX}" && \
326+ echo "libc++ Source: ${LIBCXX_SOURCE}" && \
327+ echo "libc++ Include: ${LIBCXX_INCLUDE_DIR}" && \
328+ echo "libc++ Library: ${LIBCXX_LIBRARY_DIR}" && \
329+ echo "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" && \
330+ echo "===========================" && \
331+ CC="${BUILD_CC}" CXX="${BUILD_CXX}" cmake .. \
332+ -DCMAKE_C_COMPILER="${BUILD_CC}" \
333+ -DCMAKE_CXX_COMPILER="${BUILD_CXX}" \
334+ -DCMAKE_CXX_STANDARD=17 \
335+ -DCMAKE_CXX_EXTENSIONS=OFF \
336+ -DCMAKE_CXX_FLAGS="${CMAKE_CXX_FLAGS}" \
337+ -DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++ -L${LIBCXX_LIBRARY_DIR} -Wl,-rpath,${LIBCXX_LIBRARY_DIR}" \
338+ -DCMAKE_SHARED_LINKER_FLAGS="-stdlib=libc++ -L${LIBCXX_LIBRARY_DIR} -Wl,-rpath,${LIBCXX_LIBRARY_DIR}" \
339+ -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}" \
340+ -DUSE_LIBCXX=ON \
341+ -DOpenMP_C_FLAGS="${OPENMP_C_FLAGS}" \
342+ -DOpenMP_CXX_FLAGS="${OPENMP_CXX_FLAGS}" \
343+ -DOpenMP_C_LIB_NAMES="libomp" \
344+ -DOpenMP_CXX_LIB_NAMES="libomp" \
345+ -DOpenMP_libomp_LIBRARY="${OMP_LIBRARY}" \
346+ -DBUILD_SHARED_LIBS=ON \
347+ -DCMAKE_BUILD_TYPE=Release \
348+ -DCMAKE_INSTALL_PREFIX=/opt/pytorch \
349+ -DBUILD_PYTHON=OFF \
350+ -DBUILD_TEST=OFF \
351+ -DBUILD_CAFFE2=OFF \
352+ -DUSE_DISTRIBUTED=OFF \
353+ -DUSE_MPS=OFF \
354+ -DUSE_CUDA=OFF \
355+ -DUSE_MKLDNN=OFF \
356+ -DUSE_XNNPACK=OFF \
357+ -DUSE_QNNPACK=OFF \
358+ -DUSE_FBGEMM=OFF \
359+ -DPYTHON_EXECUTABLE=$(which python3) \
360+ -D_GLIBCXX_USE_CXX11_ABI=1 \
361+ -GNinja
362362
363363# # Stage 4: Build PyTorch (this is the resource-intensive step)
364364# # Using MAX_JOBS=2 to avoid OOM on GitHub Actions runners (7GB RAM limit)
365365# # Adding error logging to capture build failures
366- # RUN set -ex && \
367- # cd /tmp/pytorch/build && \
368- # echo "Starting PyTorch build with MAX_JOBS=${MAX_JOBS}..." && \
369- # cmake --build . --target install -j${MAX_JOBS} 2>&1 | tee /tmp/pytorch-build.log || \
370- # (echo "=== BUILD FAILED ===" && \
371- # echo "Last 100 lines of build log:" && \
372- # tail -n 100 /tmp/pytorch-build.log && \
373- # exit 1)
366+ RUN set -ex && \
367+ cd /tmp/pytorch/build && \
368+ echo "Starting PyTorch build with MAX_JOBS=${MAX_JOBS}..." && \
369+ cmake --build . --target install -j${MAX_JOBS} 2>&1 | tee /tmp/pytorch-build.log || \
370+ (echo "=== BUILD FAILED ===" && \
371+ echo "Last 100 lines of build log:" && \
372+ tail -n 100 /tmp/pytorch-build.log && \
373+ exit 1)
374374
375375# Stage 5: Cleanup after PyTorch build
376376# cmake --target install already installed to /opt/pytorch, so just cleanup
377- # RUN rm -rf /tmp/pytorch /tmp/pytorch-build.log && \
378- # echo "PyTorch installation complete" && \
379- # echo "Verifying PyTorch library installation:" && \
380- # ls -lh /opt/pytorch/lib/ | head -20
377+ RUN rm -rf /tmp/pytorch /tmp/pytorch-build.log && \
378+ echo "PyTorch installation complete" && \
379+ echo "Verifying PyTorch library installation:" && \
380+ ls -lh /opt/pytorch/lib/ | head -20
381381
382382# Try with pre-build torch version
383- RUN wget https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-2.8.0%2Bcpu.zip && \
384- unzip libtorch-shared-with-deps-2.8.0+cpu.zip -d /opt/ && mv /opt/libtorch /opt/pytorch
383+ # RUN wget https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-2.8.0%2Bcpu.zip && \
384+ # unzip libtorch-shared-with-deps-2.8.0+cpu.zip -d /opt/ && mv /opt/libtorch /opt/pytorch
385385
386386# Set up PyTorch library paths
387387RUN echo "/opt/pytorch/lib" > /etc/ld.so.conf.d/pytorch.conf && \
0 commit comments