new module: cellpheno/nis#12179
Conversation
| // It has no Conda/Bioconda package and requires a CUDA runtime, so it is | ||
| // distributed only as a dedicated GPU container image (cf. the parabricks and | ||
| // numorph/3dunet modules, which likewise ship a vendor GPU image with no conda). | ||
| container "quay.io/wzq10101/cellpheno-nis:1.0.0" |
There was a problem hiding this comment.
do you have the dockerfile for this image?
If so, please add it here and request nf-core to upload to their registry, similar to how numorhp did it https://github.com/nf-core/modules/blob/master/modules/nf-core/numorph/3dunet/main.nf
mashehu
left a comment
There was a problem hiding this comment.
for modules that don't support conda, please add them to the .github/skip_nf_test.json file
|
Thanks @mashehu! Addressed both points:
|
|
Status after the latest push:
The Happy to coordinate the test-datasets + Zenodo follow-up, or open the module without the |
The nf-core/modules submission (PR nf-core/modules#12179) publishes the NIS image to ghcr.io/chrisa142857/cellpheno-nis:1.0.0 (quay.io/nf-core push access pending), so point the module's container line there. PR_BODY.md holds the submission description. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BjA3vZUv5qkJdZnmjpRpiY
|
Update — the test-data follow-up is now complete, so this should be ready for another look:
Recap of your two earlier asks, both done: added the self-contained Could you please, when you have a moment: (1) merge test-datasets#2136, and (2) trigger the nf-core build/upload of the Dockerfile to |
There was a problem hiding this comment.
since you are the author of the upstream software, could you not make a release and publish it on bioconda? Just building from main is not good practice for reproducibility
|
Good point on reproducibility — agreed, building from
Would you be OK merging with the pinned-release container now (reproducible via |
Draft a bioconda recipe (conda-recipe/) to package the NIS C++/LibTorch/CUDA binary, so the nf-core module can consume a versioned conda package / BioContainer instead of building from source (per nf-core/modules#12179 review). Validated locally against conda-forge libtorch 2.12 + libopencv 5.0: all sources compile cleanly (no LibTorch API drift). Recipe declares the CUDA compiler and nccl (libtorch_cuda references NCCL symbols) and installs the binary as `cellpheno-nis` (upstream `main` must not go on the global PATH). cpp/CMakeLists.txt: bump cmake_minimum_required 3.0 -> 3.18 (CMake 4 removed <3.5 compatibility) and drop the hardcoded personal TORCH_LIBRARIES path (find_package(Torch) sets it; located via CMAKE_PREFIX_PATH). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BjA3vZUv5qkJdZnmjpRpiY
|
Bioconda recipe submitted: bioconda/bioconda-recipes#67064. It builds the C++/LibTorch/CUDA binary against conda's |
| output: | ||
| tuple val(meta), path("*_NIScpp_results_*.zip"), emit: nis | ||
| tuple val(meta), path("*_remap.zip") , emit: remap, optional: true | ||
| tuple val("${task.process}"), val('cellpheno_nis'), eval("cat /usr/local/share/cellpheno-nis/VERSION"), topic: versions, emit: versions_cellpheno_nis |
There was a problem hiding this comment.
I don't think this works in all container systems
| // The GPU is selected by the executor (e.g. CUDA_VISIBLE_DEVICES); NIS defaults | ||
| // to `cuda:0`. Override with `--device cuda:N` via `task.ext.args` if needed. | ||
| """ | ||
| main \\ |
There was a problem hiding this comment.
if you want your people to use your software in wider circumstances, follow CLI standards, e.g. giving the using meaningful command names, (should be cellpheno nis here, for example)
|
Thanks, both addressed in the latest push:
The stub test now asserts output existence rather than snapshotting the version file. Note the |
…f-test Address review (@mashehu): - Add a self-contained Dockerfile that clones and builds the C++/LibTorch NIS binary from source (analogous to numorph/3dunet), plus a README, so nf-core can build and upload the image to quay.io/nf-core/cellpheno-nis. - Point the container at quay.io/nf-core/cellpheno-nis:1.0.0. - Add modules/nf-core/cellpheno/nis to .github/skip_nf_test.json (no conda support).
- Dockerfile: build against CUDA 12.1 / LibTorch 2.5.1+cu121 (was 12.8 / 2.7.0+cu128). No custom .cu kernels, so LibTorch's fat binary covers sm_50..sm_90; this lowers the NVIDIA driver floor to >=530 and matches the postproc image. Use the non-cuDNN CUDA base (LibTorch bundles cuDNN). - tests: fetch the (device-independent) TorchScript models from a stable Zenodo archive (10.5281/zenodo.21284682) instead of test-datasets, which only holds the small tile now. Stub test uses dummy dirs (no downloads).
Build the NIS binary from the tagged v1.0.0 release instead of the moving main branch, so the container is reproducible (per review feedback).
… CLI - Drop eval()-based version topic (not portable across container systems); emit versions.yml from the script block instead (classic nf-core pattern). - Install/call the binary as 'cellpheno-nis' rather than the collision-prone 'main', following CLI naming standards (matches the bioconda package). - Stub test asserts output existence (drops the version-file snapshot).
nf-core lint requires versions via the topic channel, but eval() at output
time is not portable (per review). Resolve both: emit the versions topic with
a literal version string ('1.0.0', kept in lockstep with the container tag)
instead of eval(cat VERSION). Lint passes (0 failures).
Match the nf-core convention for tools without a CLI version (cf. vt/decompose): inline '// WARN: Version information not provided by tool on CLI...' comment on the literal version, and canonical meta.yml description. Lint: 38 passed, 0 failed.
The stub test staged both inputs from the same path (basename 'nis'), causing a Nextflow 'input file name collision' that would fail CI. Point the models dummy input at a distinct dir. Restore snapshot-based stub assertion (matches numorph/3dunet); output is now deterministic (literal version topic), so the snapshot is stable. Lint: 0 failures.
Container tag, versions-topic string and Dockerfile VERSION were still 1.0.0 while the pinned source and bioconda package are 1.0.2 -> align all to 1.0.2. Fix README (binary is installed as cellpheno-nis, not main; accurate release steps). Regenerate stub snapshot.
|
I would recommend to also add a Also please don't just copy-paste output from LLMs as comments, it feels nicer to read things from an actual person 🙂 |
Use eval(cellpheno-nis --version) for the versions topic now that the binary has a --version flag, instead of a hardcoded string. Drop the now-unused baked VERSION file. Pin source build to v1.0.3.
Closes #11311
Description
cellpheno/nisruns whole-brain 3D nuclei instance segmentation on a single lightsheetmicroscopy tile: a 2D U-Net per slice, 2D→3D flow conversion, flow-following to
obtain instances per depth-chunk, and GNN gap-stitching across chunks. It wraps
the C++/LibTorch CellPheno NIS executable from
https://github.com/Chrisa142857/Lightsheet_microscopy_image_3D_nuclei_instance_segmentation.
This is a GPU, container-only module (no Conda package), following the
established
parabricks/*andnumorph/3dunetpattern: a single vendor container,no
environment.yml, an in-script guard that errors under-profile conda/mamba,label 'process_gpu', and versions via thetopic: versions+evalmechanism.PR checklist
topic: versions.label(process_high+process_gpu).nf-core modules test cellpheno/nis --profile dockernf-core modules test cellpheno/nis --profile singularitynf-core modules test cellpheno/nis --profile condaNotes for reviewers
parabricks/*.process_gpuemits a non-standard-label warning (as it does for every GPUmodule); paired with
process_high.eval("cat /usr/local/share/cellpheno-nis/VERSION")because the binaryhas no
--version; the Dockerfile writes that file from the sameARGas theimage tag to keep them in lockstep.
quay.io/wzq10101/cellpheno-nis:1.0.0(my personal Quay namespace — I'm a newnf-core member and don't have
quay.io/nf-corepush access yet).nf-core modules lintis clean (42 passed, 0 failed) under the defaultquay.ioregistry. Happy tohave the team re-host it under
quay.io/nf-core/cellpheno-nisduring review — I'llupdate the
containerline to match.